【题目描述】
求两个不超过200位的非负整数的和。
【输入】
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
二话不说,直接上代码
【源代码】
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2010;
int a[maxn],b[maxn],c[maxn];
char sa[maxn],sb[maxn];
int main(){
int x = 0;
scanf("%s", sa);
scanf("%s", sb);
int lena = strlen(sa),lenb = strlen(sb); //读入字符串sa,sb
//反向存储sa,sb
for(int i = 0; i <= lena-1; i++) a[lena-i] = sa[i]-'0';
for(int i = 0; i <= lenb-1; i++) b[lenb-i] = sb[i]-'0';
int lenc = 1; //进位从第一位加起
while(lenc <= lena||lenc <= lenb){ //判断两个大整数是否没加完
c[lenc] = a[lenc]+b[lenc]+x; //x表示前一次的进位
x = c[lenc]/10; //判断是否进一
c[lenc] = c[lenc]%10; //求相加后的数的位数
lenc++;
}
c[lenc] = x;
while(c[lenc] == 0&&lenc>1) lenc--; //去掉多余前导0
//在反向输出
for(int i = lenc; i >= 1; i--) printf("%d",c[i]);
printf("\n");
return 0;
}
通过
测试点 | 结果 | 内存 | 时间 |
测试点1 | 答案正确 | 616KB | 4MS |
测试点2 | 答案正确 | 620KB | 4MS |
测试点3 | 答案正确 | 616KB | 4MS |
测试点4 | 答案正确 | 620KB | 4MS |
测试点5 | 答案正确 | 620KB | 4MS |
测试点6 | 答案正确 | 612KB | 4MS |
测试点7 | 答案正确 | 624KB | 4MS |
测试点8 | 答案正确 | 624KB | 4MS |
测试点9 | 答案正确 | 624KB | 4MS |
测试点10 | 答案正确 | 620KB | 4MS |