如果9223372036854775807+9223372036854775807该怎么办呢?如果硬加,范围肯定会溢出
//错误写法!数据溢出
#include <iostream>
using namespace std;
int main(){
long long a = 9223372036854775807+9223372036854775807;
cout<<a;
}
这个时候我们就需要用到字符串了,将两个字符串进行竖式模拟,从而得出答案。
#include <iostream>
#include <string>
using namespace std;
string a,b;
const int Maximum_number_of_digits = 1005;//可以修改的哦!
long long x[Maximum_number_of_digits],y[Maximum_number_of_digits],ans[Maximum_number_of_digits];
int main(){
cin>>a>>b;
int l1 = a.size(),l2 = b.size();
for(int i = 0;i<=l1-1;i++){
x[i] = a[l1-1-i] - '0';//char 转 long long
}
for(int i = 0;i<=l2-1;i++){
y[i] = b[l2-1-i] - '0';//char 转 long long
}
for(int i = 0;i<=max(l1,l2);i++){
ans[i] = x[i]+y[i];//计算和
}
for(int i = 0;i<=max(l1,l2);i++){
ans[i+1]+=ans[i]/10;//考虑进位
ans[i]%=10;
}
bool flag = 0;
for(int i = max(l1,l2);i>=0;i--){//考虑多输出的0
if(ans[i]!=0){
flag = 1;
}
if(flag){
cout<<ans[i];
}
}
if(!flag){//如果上方没有输出代表结果为0,则输出0
cout<<0;
}
return 0;
}
上面的代码就可以计算超长、超大的加法啦。
9223372036854775807+9223372036854775807=18446744073709551614