如果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