(计算长长数的总和)
每当我输入一个很长的数字时,程序总是返回-1或-2,任何人都知道为什么?
#include <iostream>
#include <math.h>
#include <string>
#include<iomanip>
using namespace std;
int main()
{
int n,i;
long long x1,x2,s;
do{
cin>>n;
}while(n<1);
long long t1[n];
long long t2[n];
string ch1,ch2;
i=0;
do{
do{
scanf("%lld %lld", &x1, &x2);
ch1=to_string(x1);
ch2=to_string(x2);
}while((ch1.length()>pow(10,5)) || (ch2.length()>pow(10,5)));
t1[i]=x1;
t2[i]=x2;
i++;
}while(i<n);
for(i=0;i<n;i++){
s=t1[i]+t2[i];
cout<<s<<endl;
}
return 0;
}
无法找到解决方案请帮助!和thx提前!
示例输入:
1
14444444444444444111115556
55656464684646464646647676
输出
-2
//编辑:
有没有办法计算100000的十进制数字之和,就像使用标准库的示例中的数字一样?
答案 0 :(得分:3)
long long
等基本积分类型的范围有限。如果计算导致结果大于可以表示的结果,则它将溢出。有符号整数溢出在C ++中有未定义的行为。
通过使用整数数组来表示数字的不同部分,可以表示无限范围的数字(理论上,内存限制了实践)。这种技术称为任意精度算术。
C ++标准库中没有任意精度类型的实现,因此您必须自己实现,或者可以使用其他人实现的库。