蓝桥杯 ADV-121.高精度加法

ADV-121.高精度加法

【问题描述】

在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。
现在输入两个整数,请输出它们的和。

【输入格式】

两行,每行一个整数,每个整数不超过1000位

【输出格式】

一行,两个整数的和。

【样例输入】

15464315464465
465482321654151

【样例输出】

15464797786119616

#include <iostream>
using namespace std;
string add(string s1,string s2){
	int len1=s1.length(),len2=s2.length();
	if(len1<len2){             //如果第一个字符串的长度小于第二个 
		string t(len2-len1,'0');
		s1=t+s1;               //将第二个字符串从前到后填上0,使得其长度和第一个相等 
	}else if(len2<len1){
		string t(len1-len2,'0');
		s2=t+s2;
	}
	string ans=s1;       //ans串存结果 
	int car=0;           //存放进位 
	for(int i=s1.length()-1;i>=0;--i){      //从个位开始模拟加法 
		ans[i]=(s1[i]-'0'+s2[i]-'0'+car)%10+'0';
		car=(s1[i]-'0'+s2[i]-'0'+car)/10;         //计算进位 
	}
	if(car)
	ans=(char)(car+'0')+ans; //计算到最后的话,如果有进位,要加上进位 
	return ans;
}
int main(){
	string s1,s2;
	cin>>s1>>s2;
	cout<<add(s1,s2);
	return 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值