NOI1.6.10大整数加法 附带详细注释题解

NOI1.6.10大整数加法题解

题目传送门

题目

10:大整数加法
查看提交统计提问
总时间限制: 1000ms 内存限制: 65536kB
描述
求两个不超过200位的非负整数的和。

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555

思路

思路就是输入完后储存到一个int的数组中,然后再按位相加,最后只要把前导0去掉就行了。

代码

#include
using namespace std;
int main(){
	char c1[205],c2[205];
	int n1[205] = {0},n2[205] = {0};
	int i;
	cin>>c1>>c2;
	int len1 = strlen(c1);
	int len2 = strlen(c2); 
	for(i = 1;i<=len1;i++)n1[i] = c1[len1-i]-48;
	for(i = 1;i<=len2;i++)n2[i] = c2[len2-i]-48;
	// 将C1,C2转入int数组中
	for(i = 1;i<=len1||i<=len2;i++){
		n1[i]+=n2[i];
		if(n1[i]>9){
			n1[i+1]++;//下一位进1
			n1[i]-=10;//当前这一位变成一位
		}
	}
	while(n1[i] == 0&&i>1)i--;//遇到前导0起始输出位置++
	while(i)cout<<n1[i--]; //在整回去
	return 0;
}

你可能感兴趣的:(题解,信息学,高精度)