描述
求两个不超过200位的非负整数的和。
格式
输入格式
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出格式
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例
输入样例
22222222222222222222 33333333333333333333
输出样例
55555555555555555555
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 10001
void Reverse(char *s,int n){
for(int i=0,j=n-1;i<j;i++,j--){
char c=s[i];
s[i]=s[j];
s[j]=c;
}
}
int main(){
char a[201], b[201];
int res[201],cnt;
for(int i=0; i<201; ++i){
a[i] = b[i] = 0;
}
cin>>a>>b;
int lena = strlen(a);
int lenb = strlen(b);
Reverse(a, lena);
Reverse(b, lenb);
int len = max(lena, lenb);
int flag = 0;
cnt = 0;
// printf("len = %d\n", len);
for(int i=0; i<len; ++i){
if(a[i] == '\0'){
a[i] = '0';
}
if(b[i] == '\0'){
b[i] = '0';
}
int sum = (a[i] - '0' + b[i] - '0') + flag;
flag = sum/10;
sum = sum%10;
res[cnt++] = sum;
}
if(flag>=1){
res[cnt++] = flag;
}
// printf("cnt = %d\n", cnt);
flag = 1;
for(int i=cnt-1; i>=0; --i ){
if(res[i] == 0 && flag){
continue;
}
flag = 0;
printf("%d", res[i]);
}
return 0;
}
1万+

被折叠的 条评论
为什么被折叠?



