【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
【解题思路】
使用string类型的变量暂时储存输入的大整数,接着用for循环将它以整型逆序存储在数组里,方便计算。核心代码是c[i] = a[i]+b[i]+x(x表示进位),最后用while循环删除多余的前导0。
【题解代码】
#include <bits/stdc++.h>
using namespace std;
int a[205],b[205],c[205],len_a,len_b,len_c,x;
int main(){
string m,n;
cin >> m >> n;
len_a=m.length(),len_b=n.length();
for (int i=0;i<len_a;i++) a[len_a-i] = m[i]-'0'; # -'0',以整型逆序存储
for (int i=0;i<len_b;i++) b[len_b-i] = n[i]-'0';
for (int i=1;i<=max(len_a,len_b);i++){
c[i] += a[i]+b[i]+x;
x = c[i]/10;
c[i] %= 10;
}
len_c = max(len_a,len_b)+1; #和的最大的位数
while (len_c>1 && c[len_c]==0) len_c--;
for (int i=len_c;i>=1;i--) cout << c[i]; #逆序输出
return 0;
}