杭电1002 c语言

2024-12-15 14:59:37
推荐回答(4个)
回答1:

#include
#include
main()
{
char str1[1001],str2[1001];
int t,i,len_str1,len_str2,len_max,num=1,k;
scanf("%d",&t);
getchar();
while(t--)
{
int a[1001]={0},b[1001]={0},c[1001]={0};
scanf("%s",str1);
len_str1=strlen(str1);
for(i=0;i<=len_str1-1;i++)
a[i]=str1[len_str1-1]-'0';//明显这个for循环的作用只是把最后输入的那个字符以ANSIC码的形式赋值给了a[i],其他什么操作都没做,这里len_str1-1应该改成i。
scanf("%s",str2);
len_str2=strlen(str2);
for(i=0;i<=len_str2-1;i++)
b[i]=str2[len_str2-1]-'0';//问题同上,也改成i。
if(len_str1>=len_str2)len_max=len_str1;
else len_max=len_str2;
k=0;
for(i=0;i<=len_max-1;i++)
{
c[i]=(a[i]+b[i]+k)%10;
k=(a[i]+b[i]+k)/10;
}
if(k!=0)c[len_max]=1;
printf("Case%d:\n",num); num++;
printf("%s+%s=",str1,str2);
if(c[len_max]=1)printf("1");
for(i=len_max-1;i>=0;i--)printf("%d",c[i]);
printf("\n");
if(t>=1)printf("\n");
}
}

回答2:

// 感觉在内存使用和算法时间方面都还可以了,不知道能不能AC
#include
#include
int main()
{
int i, j, t, carry, lena, lenb;
char a[1002], b[1002], *p1, *p2;

scanf("%d", &t);
getchar();

for (i = 1; i <= t; i++)
{
carry = 0;
scanf("%s%s", a, b);
getchar();
lena = strlen(a) - 1;
lenb = strlen(b) - 1;
p1 = a;
p2 = b;
printf("Case %d:\n%s + %s = ", i, a, b);

if (lena < lenb)
{
lena = lena + lenb;
lenb = lena - lenb;
lena = lena - lenb;
p1 = b;
p2 = a;
}
for (carry = 0; lenb >= 0; lena--, lenb--)
{
p1[lena] = p1[lena] - '0' + p2[lenb] - '0' + carry;
carry = p1[lena] / 10;
p1[lena] = p1[lena] % 10 + '0';
}
for (; carry > 0 && lena >= 0; lena--)
{
p1[lena] = p1[lena] - '0' + carry;
carry = p1[lena] / 10;
p1[lena] = p1[lena] % 10 + '0';
}
if (carry > 0) printf("%d", carry);
while (*p1) printf("%d", *p1++ - '0');
printf("\n");
if (i != t) printf("\n");
}
return 0;
}

回答3:

#include
#include
void main()
{
char str1[1001],str2[1001];
int t,i,j,l,len_str1,len_str2,num=1,k,len_max;
scanf("%d",&t);
getchar();
while(t--)
{
int a[1001]={0},b[1001]={0},c[1001]={0};
scanf("%s",str1);
len_str1=strlen(str1);
for(i=0;i<=len_str1-1;i++)
a[i]=str1[i]-'0';
scanf("%s",str2);
len_str2=strlen(str2);
for(i=0;i<=len_str2-1;i++)
b[i]=str2[i]-'0';
if(len_str1>=len_str2)
len_max=len_str1;
else
len_max=len_str2;
k=0;
for(i=len_str1-1,j=len_str2-1,l=len_max-1;l>=0;i--,j--,l--)
{
if(i>=0&&j>=0)
{
c[l]=(a[i]+b[j]+k)%10;
k=(a[i]+b[j]+k)/10;
}
else if(i<0&&j>=0)
{
c[l]=(b[j]+k)%10;
k=(b[j]+k)/10;
}
else if(j<0&&i>=0)
{
c[l]=(a[i]+k)%10;
k=(a[i]+k)/10;
}
}
printf("Case%d:\n",num); num++;
printf("%s+%s=",str1,str2);
if(k)printf("1");
for(i=0;i<=len_max-1;i++)printf("%d",c[i]);
printf("\n");
if(t>=1)printf("\n");
}
}

回答4:

不知所云.....