大整数加法 (高精度训练)—— C++

求两个不超过200位的非负整数的和。

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。

输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

思路:确定两数中的最长位数,将位数小的数字前面补 0 ,接着就是小学加减法套路,由右至左上下相加,满十进一
(哭笑)忘考虑输入多位 0 的情况了,活生生地检查了六七遍代码。
代码

#include<string>
#include<iostream>
using namespace std;
int main(){
	string a, b; cin >> a >> b;
	
	int na = a.length(), nb = b.length();
	int n;
	na > nb ? n = na : n = nb;//确定最长的数字长度
	
	while (a.size() != n)//小位补零
		a = "0" + a;
	while (b.size() != n)
		b = "0" + b;
		
	int c = 0;
	string tem = "";
	for (int i = n - 1; i >= 0; i--) {//小学加法
		tem += ((c + (a[i] - '0') + (b[i] - '0')) % 10 + '0');
		c = (c + (a[i] - '0') + (b[i] - '0')) / 10;
	}
	tem += (c + '0');
	
	int k;
	for (k = tem.length() - 1; k >= 0; k--)//确定前导 0 的位置
		if (tem[k] != '0')
			break;
			
	if (k==-1)//漏掉的 000 + 0000 情况
		cout << "0";
	else
		for (int i = k; i >= 0; i--)
			cout << tem[i];		
	cout << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值