【洛谷】高精度算法

高精度算法

题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b<=10^{500}a,b<=10
500
输出格式
输出只有一行,代表a+b的值
输入 #1
1
1
输出
2

说难不难,就是数字太长,导致编译器自带的+ - * /只对int long有效,而超限就会乱码。这时候引入string,算法思路和笔算一样,从最后一个开始加并且进位
这时候需要将2个string类进行比较,短的后面加0补齐,然后反转相加,再反转输出即可,代码如下:

using namespace std;
int main()
{
	string s1,s2,s3; //举例 s1为99 s2为111 
	cin>>s1;
	cin>>s2;
	int len; //例为3 
	len=max(s1.length(),s2.length()); //较长的长度 
	reverse(s1.begin(),s1.end()); //反转s1  
	reverse(s2.begin(),s2.end()); //反转s2 
	for(int i=s1.length();i<len;i++)
	{
		s1+='0';
	} //s1变为990  
	for(int i=s2.length();i<len;i++)
	{
		s2+='0';
	} //s2 111 
	int a=0; //定义a为进位数 如7+8进1 a=1 
	for(int i=0;i<len;i++)
	{
		int k;
		k=a+(s1[i]-'0')+(s2[i]-'0'); //加进位求和 
		s3+=(k%10)+'0'; //对10取余 
		a=k/10; //进位 
	}
	if(a) //若最后a不位0 直接最高位为a 例如99+111=1010   
	s3+=a+'0';
	reverse(s3.begin(),s3.end()); //反转即可 
	cout<<s3;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值