目录
题目详情:
提示:
代码:
#include<stdio.h>
#include<string.h>
void Inverse(char *s);
void Add(char *a,char *b,char *sum);
int main()
{
char a[100],b[100],sum[300];
scanf("%s%s",a,b);
Add(a,b,sum);
printf("%s",sum);
return 0;
}
void Inverse(char *s){ //定义翻转函数,inverse=reverse
char tmp;
int len=strlen(s);
for(int i=0;i<len-i-1;i++){
tmp=s[i];
s[i]=s[len-i-1];
s[len-i-1]=tmp;
}
}
void Add(char *a,char *b,char *sum){ //定义求和函数
int m=strlen(a);
int n=strlen(b);
int acc=0; //acc表示是否要进位
int t,i;
Inverse(a);
Inverse(b);
for(i=0;i<m||i<n;i++){
if(i>=m)
t=b[i]-'0'+acc;
else if(i>=n)
t=a[i]-'0'+acc;
else
t=a[i]-'0'+b[i]-'0'+acc;
sum[i]=t%10+'0'; //不要忘记+'0'
if(t>9) //判断是否需要进位
acc=1;
else
acc=0;
}
if(acc) //若出了循环acc还是1的话,表明进位后最高位是1
sum[i++]='1'; //此处i++的使用很妙,既保证此处使用i的值,又保证下次使用i的时候加1
sum[i]='\0'; //莫忘记字符串末尾的'\0'
Inverse(sum);
}
总结:
1.做竖式加法要考虑进位问题;
2.注意字符’0‘与数字0的区别,在使用时要注意变换;
3.字符串末尾'\0'不要忘记。