您的位置:首页 > 其它

hdu1002 大整数加法

2017-09-06 13:52 288 查看
有很多小细节需要注意:
1.去除前导零
2.翻转时的char与int变换
#include<iostream>
#include<cstring>
#include<string>
#define maxn 1002
using namespace std;
char aa[maxn],bb[maxn];
int sum[maxn],a[maxn],b[maxn];
int main(){
int n;
scanf("%d",&n);
for(int k = 0;k<n;k++){
scanf("%s%s",&aa,&bb);
printf("Case %d:\n%s + %s = ",k+1,aa,bb);
int len1 = strlen(aa),len2 = strlen(bb);

int maxl = len1<len2?len2:len1;
for(int i = 0;i<maxl;i++){
a[i] = len1-i-1>=0?aa[len1-i-1]-'0':0;
b[i] = len2-i-1>=0?bb[len2-i-1]-'0':0;
}
int ca = 0;
for(int i = 0;i<maxl;i++){
sum[i] = ca + a[i]+b[i];
ca = sum[i]/10;
sum[i]%= 10;
}
int len = maxl;
if(ca){
sum[len++] = ca%10;
ca = ca/10;
}
//去除前导0
maxl = 0;
for(int i = len-1;i>=0;i--){
if(sum[i]){
maxl = i+1;
break;
}
}
if(!maxl){
printf("0\n");
}
else{
for(int i = maxl-1;i>=0;i--){
printf("%d",sum[i]);
}
printf("\n");
}

//case间空格
if(k!=n-1){
printf("\n");
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: