#include <stdio.h>
#include <string.h>
#define N 200
int change(char str[],int d[])
{
int i,j,len=strlen(str);
j=N-1;
for(i=0;i<N-1;i++)
d[i]=0;
for(i=len-1;i>=0;i--)
d[j--]=(str[i]-'0');
return j+1;
}
void change2(char th[],int k,int c[])
{
int i;
char s[10];
sprintf(th,"%d",c[k]);
for(i=k+1;i<N;i++)
{
sprintf(s,"%d",c[i]);
strcat(th,s);
}
}
void add(char st1[],char st2[],char st[])
{
int a[N],b[N],c[N];
int i,sum=0,k1,k2,k,re=0;
if (strlen(st1)==0)
{
strcpy(st,st2);
return;
}
if (strlen(st2)==0)
{
strcpy(st,st1);
return;
}
k1=change(st1,a);
k2=change(st2,b);
k=k1<k2?k1:k2;
for(i=N-1;i>=k;i--)
{
sum=a[i]+b[i]+re;
c[i]=sum%10;
re=sum/10;
}
if(re>0)
{
k--;
c[i]=re;
}
change2(st,k,c);
}
int main()
{
char st1[N],st2[N],st[N];
scanf("%s%s",st1,st2);
add(st1,st2,st);
printf("%s\n",st);
return 0;
}
OK了~运行全都正确,我把那个四个字符转换成一个四位的整数的语句去掉了。。
#include <string.h>
#define N 200
int change(char str[],int d[])
{
int i,j,len=strlen(str);
j=N-1;
for(i=0;i<N-1;i++)
d[i]=0;
for(i=len-1;i>=0;i--)
d[j--]=(str[i]-'0');
return j+1;
}
void change2(char th[],int k,int c[])
{
int i;
char s[10];
sprintf(th,"%d",c[k]);
for(i=k+1;i<N;i++)
{
sprintf(s,"%d",c[i]);
strcat(th,s);
}
}
void add(char st1[],char st2[],char st[])
{
int a[N],b[N],c[N];
int i,sum=0,k1,k2,k,re=0;
if (strlen(st1)==0)
{
strcpy(st,st2);
return;
}
if (strlen(st2)==0)
{
strcpy(st,st1);
return;
}
k1=change(st1,a);
k2=change(st2,b);
k=k1<k2?k1:k2;
for(i=N-1;i>=k;i--)
{
sum=a[i]+b[i]+re;
c[i]=sum%10;
re=sum/10;
}
if(re>0)
{
k--;
c[i]=re;
}
change2(st,k,c);
}
int main()
{
char st1[N],st2[N],st[N];
scanf("%s%s",st1,st2);
add(st1,st2,st);
printf("%s\n",st);
return 0;
}
OK了~运行全都正确,我把那个四个字符转换成一个四位的整数的语句去掉了。。