#include<stdio.h>
#include<string.h>
int main(void)
{
void revers(char *x);
char a[1000]={'0'},b[1000]={'0'};
gets(a);
gets(b);
revers(a);
revers(b);
char x;
int i;
#include<stdio.h>
#include<string.h>
int main(void)
{
void revers(char *x);
char a[1000]={'0'},b[1000]={'0'};
gets(a);
gets(b);
revers(a);
revers(b);
int x;
int i;
for(i=0;i<strlen(a)&&i<strlen(b);i++) //a[]存放结果
{
x=a[i]+b[i];
if(x>=10)
{
a[i]=x%10;
a[i+1]+=1;
}
else a[i]=x;
}
if(strlen(a)<strlen(b))
{
for(i=strlen(a);i<strlen(b);i++,a[i]=b[i])
;
}
revers(a);
for(i=0;i<strlen(a);i++)
printf("%c",a[i]);
}
void revers(char *x)
{
int i,temp,len=strlen(x);
for(i=0;i<len/2;i++)
{
temp=x[i]; x[i]=x[len-1-i]; x[len-1-i]=temp;
}
}
存在两个int main(void)、两个char a[1000]={'0'},b[1000]={'0'};,这肯定错。
根据gets(a); gets(b);这样的输入,a、b中存放的是字符,每一个字符的编码都大于等于48,用>=10判断是否有进位显然是错误的。
revers函数库里有,没有必要自定义一个,免得出错。
下面写一个供参考——
代码文本:
#include "stdio.h"
#include <string.h>
int main(int argc,char *argv[]){
char a[1000]="",b[1000]="";
int i,t,la,lb;
printf("Please enter the two positive integers...\n");
scanf("%999[0-9] %999[0-9]",a,b);//只允许输入数字且最大长度999
strrev(a);
strrev(b);
if((la=strlen(a))<(lb=strlen(b))){//长数作加数a,若a短则交换内容,避免用指针
for(i=0;i<la;t=a[i],a[i]=b[i],b[i]=t,i++);
for(a[i]=b[i],b[i++]='\0';a[i++]=b[i];);
t=la,la=lb,lb=t;
}
for(i=0;i<lb;i++)
if((a[i]+=b[i]-'0')>'9')//-'0'就变成了数字
a[i]-=10,a[i+1]++;//处理进位
for(;i<la;i++)//处理剩余部分进位
if(a[i]>'9')
a[i]-=10,a[i+1]++;
else//一旦无进位,前面就不会再有进位了
break;//前面就不会再有进位了
if(a[la])//最高位有进位的话处理一下
a[la]='1',a[la+1]='\0';
strrev(a);
printf("\nThe result is %s\n",a);
return 0;
}