hdu1002 大整数计算

这一题实在有坑,而且是大坑,本来以为只是简单的整数题,最多用long就可以了吧,但是实际上这一题要用到大整数加法,在c++中大整数加法是通过字符串模拟来实现的,Java可以直接使用BigInteger类,后面贴代码,下面是c++常用数据类型的范围:

short : -32768 ~ 32767

int : -2147483648 ~ 2147483647

long : -2147483468 ~ 2147483647

float : 1.17549e-038 ~ 3.40282e+038

double : 2.22507e-308 ~ 1.79769e+308

c++实现大数加法:

#include<iostream>
#include<cstring>

using namespace std;

int main()
{
int i = 0;
int m[10000] , n[10000] , sum[20000];
string a , b;
int count;
cin >> count;
int flag = 1;
while(count--)
{
cin >> a;
cin >> b;
memset(m , 0 , sizeof(m));
memset(n , 0 , sizeof(n));
memset(sum , 0 , sizeof(sum));
int pre = 0;
int lena = a.length();
int lenb = b.length();
int lenmax = max(lena , lenb);
for(i = 0 ; i < lena ; i++)
m[lena - i - 1] = a[i] - ‘0‘;
for(i = 0 ; i < lenb ; i++)
n[lenb - i - 1] = b[i] - ‘0‘;
for(i = 0 ; i < lenmax ; i++)
{
sum[i] += m[i] + n[i] + pre / 10;
pre = sum[i];
}
while(pre > 9)
{
sum[lenmax] = pre / 10 % 10;
lenmax++;
pre = pre / 10;
}
cout << "Case " << flag << ":" << endl;
flag++;
cout << a << " + " << b << " = ";
for(i = lenmax - 1 ; i >= 0 ; i--)
cout << sum[i] % 10;
cout << endl;
if(count)
cout << endl;
}
return 0;
}

还需要注意的一点是,在hdu提交答案的过程中,一定要注意不要多打空格。

原文地址:https://www.cnblogs.com/zzb-algorithm/p/11794856.html

时间: 2024-10-08 13:38:51

hdu1002 大整数计算的相关文章

Sum(快速幂+大整数计算)

题意:给出一个函数s,该函数值为对于n的s(k)为数列的个数,该数列满足x1,x2--xk为正整数且x1+x2+--+xk=n:求解s(1)+s(2)+--+s(n); 分析:本题最坑的地方在于(1,2)与(2,1)算两种,搞明白这个就可以分析l 对于2来说就是 1 3  : 1,1 4  :1,2,1 5  :1,4,2,1 以此类推可知  其和为2^(n-1);但是n的个数特别大,所以不能直接输入,要采用大数计算方法,一定要用快速幂的方式. 快速幂:a^n=(a^2)^(n/2),这样就可以

大整数算法[01] 大整数的表示和相关定义

★ 相关的数据类型定义 在干正事之前,先定义好各种数据类型还是很有必要的,避免在以后的编码中引起混乱. uintX   X位无符号整形,如uint32表示32位无符号整形 intX    X位有符号整形,如int32表示32位有符号整形 基本数据类型定义: #ifdef _MSC_VER            typedef __int8              int8;            typedef __int16             int16;            typ

大整数算法[00] 概述

★ 为啥要做这个 早在大一的时候,我便对密码学产生兴趣.那时在计算机导论后面看到RSA加密的计算原理,觉得十分有趣,于是就很想自己实现一个RSA加密,不过我很快就放弃了,因为实在搞不定那超长的整数计算.C里面最长的整数类型也就64位,对于动辄就1024位的RSA密钥,这连个零头都没有.为了完成这个目标,我便开始琢磨着弄一个用来计算大整数的库.原本我也打算使用别人已经写好的大数库,不过最终还是决定自己搞一个,因为凡是效率高速度快的大数库 (OpenSSL, Crypto++, GMP),要么使用的

用阿拉伯乘法解决大整数相乘问题

问题 大整数相乘 思路说明 对于大整数计算,一般都要用某种方法转化,否则会溢出.但是python无此担忧了. Python支持"无限精度"的整数,一般情况下不用考虑整数溢出的问题,而且Python Int类型与任意精度的Long整数类可以无缝转换,超过Int 范围的情况都将转换成Long类型. 例如: >>> 2899887676637907866*1788778992788348277389943 5187258157415700236034169791337062

大整数算法[08] Comba乘法(原理)

★ 引子          原本打算一篇文章讲完,后来发现篇幅会很大,所以拆成两部分,先讲原理,再讲实现.实现的话相对复杂,要用到内联汇编,要考虑不同平台等等. 在大整数计算中,乘法是非常重要的,因为在公钥密码学中模幂运算要频繁使用乘法,所以乘法的性能会直接影响到模幂运算的效率.下面将会介绍两种乘法:基线乘法和 Comba 乘法,尽管他们的原理和计算看起来十分类似,而且算法的时间复杂度都是 O(n^2),但是他们的效率差别是很大的. ★ 基线乘法 (Baseline Multiplication

[算法]:分治法-求大整数相乘

#问题大整数相乘 #思路说明 对于大整数计算,一般都要用某种方法转化,否则会溢出.但是python无此担忧了. Python支持**"无限精度"的整数,**一般情况下不用考虑整数溢出的问题,而且Python Int类型与任意精度的Long整数类可以无缝转换,超过Int 范围的情况都将转换成Long类型. 例如: >>> 2899887676637907866*1788778992788348277389943 51872581574157002360341697913

手写 大整数

http://codevs.cn/problem/1166/ 区间dp, 手写大整数 1 #include<bits/stdc++.h> 2 #define mt(a,b) memset(a,b,sizeof(a)) 3 using namespace std; 4 typedef long long LL; 5 const int M=1e2+10; 6 7 class BigInteger{ 8 static const int M=1e2+10; 9 char s[M]; 10 int

A——大整数加法(HDU1002)

题目: I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. InputThe first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line co

使用快速傅里叶变换计算大整数乘法

我们知道,两个 N 位数字的整数的乘法,如果使用常规的算法,时间复杂度是 O(N2).然而,使用快速傅里叶变换,时间复杂度可以降低到 O(N logN loglogN). 假设我们要计算以下两个 N 位数字的乘积: a = (aN-1aN-2...a1a0)10 = aN-1x10N-1 + aN-2x10N-2 + ... + a1x101 + a0x100 b = (bN-1bN-2...b1b0)10 = bN-1x10N-1 + bN-2x10N-2 + ... + b1x101 + b