一道很简单的C语言题。。但我做了一下午。

来源:百度知道 编辑:UC知道 时间:2024/05/13 09:20:50
#include<stdio.h>
#include<math.h>
#include<string.h>
void main()
{
char a[2001],b[2001];
int x,n,i,j,k1,k2,k,t,c[2001],d;
scanf("%d",&n);
for(x=1;x<=n;x++)
{
scanf("%s %s",a,b);
k1=strlen(a);
k2=strlen(b);
k=(k1>k2)?k1:k2;
d=fabs(k1-k2);
if(k1>k2)
{
for(i=0;i<d;i++)
c[i]=a[i]-'0';
for(j=d;j<2001;j++)
{
if((a[j]-'0')+(b[j-d]-'0')<10)
c[j]=(a[j]-'0')+(b[j-d]-'0');
else
{
c[j]=(a[j]-'0')+(b[j-d]-'0')-10;
c[j-1]+=1;
}
}
for(i=d-1;i>=1;i--)
{
if(c[i]>=10)
{
c[i]=c[i]-10;
c[i-1]+=1;
}
}
printf("Case %d:\n",x);
printf("%s + %s = ",a,b);
for(i=0;i

好像就是两个差不多的地方需要修改下
就是那个进位的for循环里
也就是if(k1>k2)里面第三个for循环,修改后代码如下:
for(i=k-1;i>=1;i--) //将原来的d改为k
{
if(c[i]>=10)
{
c[i]=c[i]-10;
c[i-1]+=1;
}
}
还有else if(k1<k2)里也是同样的地方。将d改为k

#include <stdio.h>
#include <string.h>

char* _strrev(char* str)
{
char * p1;
char * p2;

if (str && *str)
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}

return str;
}

char* add(char* a, char* b, char* c)
{
const char *s1 = a, *s2 = b;
size_t m = strlen(_strrev(a)), n = strlen(_strrev(b)), i = 0;
char u = 0;
if(m > n)
{
size_t tmp = m;
m = n; n = tmp;
s1 = b; s2 = a;
}
for( ; i < m; i++)
{
c[i] = s1[