Description
求两个不超过200位的非负整数的和。
Input
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
Output
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
Sample Input
22222222222222222222
33333333333333333333
Sample Output
55555555555555555555
#include<stdio.h>
#include<string.h>
int main(){
char a[205],b[205];
int p[205]={0},q[205]={0};
int i,j,n,m;
gets(a);
gets(b);
n=strlen(a);
m=strlen(b);
j=0;
for(i=n-1;i>=0;i--){
p[j++]=a[i]-'0';
}
j=0;
for(i=m-1;i>=0;i--){
q[j++]=b[i]-'0';
}
for(i=0;i<205;i++){
p[i]=p[i]+q[i];
if(p[i]>=10){
p[i]-=10;
p[i+1]+=1;
}
}
for(i=204;i>=0;i--){
if(p[i]!=0){
for(j=i;j>=0;j--){
printf("%d",p[j]);
}
break;
}
}
if(i==-1) printf("0");
printf("\n");
}
方法二:
#include<stdio.h>
#include<string.h>
int main(){
int n,m,i,j,k,c[205]={0},d[205]={0},e[205]={0},max;
char a[205];
char b[205];
gets(a);
gets(b);
n=strlen(a);
m=strlen(b);
k=0;
for(i=n-1;i>=0;i--){
c[k++]=a[i]-'0';
}
k=0;
for(i=m-1;i>=0;i--){
d[k++]=b[i]-'0';
}
max=m>n?m:n;
for(i=0;i<max;i++){
e[i]+=c[i]+d[i];
if(e[i]>=10){
e[i+1]+=e[i]/10;
e[i]%=10;
}
}
for(i=200;i>=0;i--){
if(e[i]!=0){
for(j=i;j>=0;j--){
printf("%d",e[j]);
}
break;
}
if(i==0) printf("0");
}
printf("\n");
}
注意:0+0
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69396.html