题目描述
给出两个 200 位以内的正整数,求其和。
输入描述
多组测试数据。每组测试数据包括两行,每行一个数。
输出描述
每组测试输出一行,为所求两个整数之和。
样例输入
123
456
样例输出
579
我的代码
#include<stdio.h>
#include<string.h>
int main()
{
char str1[201],str2[201];
int l1,l2,num1[201],num2[201],i,j,a=0,b=0,n,m;
while(~scanf("%s %s",str1,str2))
{
for(i=0,j=0;i<201,j<201;i++,j++)
{
num1[i]=0;
num2[j]=0;
}
l1=strlen(str1);
l2=strlen(str2);
for(i=l1-1;i>=0;i--)
{
num1[a++]=str1[i]-'0';
}
for(j=l2-1;j>=0;j--)
{
num2[b++]=str2[j]-'0';
}
a=0,b=0;
if(l1>=l2)
{
while(b<=l2-1)
{
num1[a++]+=num2[b++];
}
for(i=0;i<200;i++)
{
if(num1[i]>=10)
{
num1[i]-=10;
num1[i+1]++;
}
}
for(i=200;i>=0;i--)
{
if(num1[i]!=0)
{
n=i;
break;
}
}
for(i=n;i>=0;i--)
{
printf("%d",num1[i]);
}
printf("\n");
}
else if(l2>l1)
{
while(a<=l1-1)
{
num2[b++]+=num1[a++];
}
for(i=0;i<200;i++)
{
if(num2[i]>=10)
{
num2[i]-=10;
num2[i+1]++;
}
}
for(i=200;i>=0;i--)
{
if(num2[i]!=0)
{
n=i;
break;
}
}
for(i=n;i>=0;i--)
{
printf("%d",num2[i]);
}
printf("\n");
}
}
return 0;
}
正确的代码
#include<stdio.h>
#include<string.h>
int main()
{
char a[201],b[201];
while(scanf("%s",a)!=EOF)
{
int A[201]={0},B[201]={0};
scanf("%s",b);
int i,n;
for(i=0;i<strlen(a);i++)
{
A[i]=a[strlen(a)-i-1]-'0';
}
for(i=0;i<strlen(b);i++)
{
n=b[strlen(b)-i-1]-'0';
B[i]=n;
}
if(strlen(a)<strlen(b))
{
for(i=0;i<strlen(a);i++)
{
B[i]=B[i]+A[i];
}
for(i=0;i<strlen(b);i++)
{
if(B[i]>9)
{
B[i]=B[i]-10;
B[i+1]=B[i+1]+1;
}
}
for(i=200;i>=0;i--)
{
if(B[i]!=0)
{
n=i;
break;
}
n=0;
}
for(i=n;i>=0;i--) printf("%d",B[i]);
printf("\n");
}
else
{
for(i=0;i<strlen(b);i++)
{
A[i]+=B[i];
}
for(i=0;i<strlen(a);i++)
{
if(A[i]>9)
{
A[i]-=10;
A[i+1]+=1;
}
}
for(i=200;i>=0;i--)
{
if(A[i]!=0)
{
n=i;
break;
}
n=0;
}
for(i=n;i>=0;i--) printf("%d",A[i]);
printf("\n");
}
strcpy(a,"");
strcpy(b,"");
}
}