一道 “大数相加”的c语言题目 VC结果正确 可是粘贴进学校的ACM平台说是结果错了,麻烦大家看看

2025-04-14 21:20:20
推荐回答(2个)
回答1:

#include
#include
int main()
{
char s1[1001],s2[1001];
char s3[1002];
int length1=0,length2=0,m=0,temp=0,sum=0,i;
gets(s1);
gets(s2);
length1=strlen(s1);
length2=strlen(s2);
length1--;
length2--;
while((length1)>=0&&(length2>=0))
{
sum+=(s1[length1]-'0')+(s2[length2]-'0');
temp=sum;
if(sum>=10)
{
temp=sum%10;
sum=1;
}
else
  sum=0;
s3[m]=temp+'0';
m++;
length1--;
length2--;
}
while(length2>=0)
{
sum+=s2[length2]-'0';
temp=sum;
if(sum>=10)
{
temp=sum%10;
sum=1;
}
else
sum=0;
s3[m]=temp+'0';
m++;
length2--;
}
s3[m]='\0';
while(length1>=0)
{
sum+=s1[length1]-'0';
    temp=sum;
if(sum>=10)
{
temp=sum%10;
sum=1;
}
else
sum=0;
s3[m]=temp+'0';
m++;
length1--;
}
s3[m]='\0';
if((length1==-1)&&(length2==-1)&&(sum==1))
{
s3[m]=sum+'0';
m++;
}
s3[m]='\0';
for(i=m-1;s3[i];i--)
{
printf("%c",s3[i]);
}
printf("\n");
return 0;


}

回答2:

#include"stdio.h"
#include"string.h"
void main()
{
char s1[1010],s2[1010];
int n1,n2,i,j,n,k=0,w=0,sum,s[1010],i1;
scanf("%s %s",s1,s2);
n1=strlen(s1);
n2=strlen(s2);
if(n1>=n2){
n=n2;
i1=n1-1;
}
else{
n=n1;
i1=n2-1;
}
for(i=n-1;i>=0;i--,i1--){
if(n1>=n2)
sum=s1[i1]-'0'+(s2[i]-'0')+w;
else
sum=s1[i]-'0'+(s2[i1]-'0')+w;
if(sum>=10){
s[k++]=sum%10;
w=1;
}
else
{
s[k++]=sum;
w=0;
}
}
if(n1>=n2)   //大数比小数多出的几位数的处理
for(j=n1-n2-1;j>=0;j--){
s[k]=s1[j]-'0'+w;
w=s[k] / 10;
s[k] %= 10;
k++;
}
else
for(j=n2-n1-1;j>=0;j--){
s[k]=s2[j]-'0'+w;
w = s[k] / 10;
s[k] %= 10;
k++;
}
s[k] = w;
if(s[k]!=0) k++;
for(i=k-1;i>=0;i--)//倒序输出
printf("%d",s[i]);
puts("");
}