1.数字长度记录在数组0号元素
2.结果存储在a数组中
3.不输出前导0,做标记
代码实现
//高精度加法改进
#include<stdio.h>
#include<string.h>
#define N 1000
//判断字符串是否为数字串,是返回1否返回0
int allDigit(char *s) {
while(*s) {
if(!(*s>='0'&&*s<='9'))
return 0;
s++;
}
return 1;
}
//将数字串s拆分为单个数字保存在整型数组,从1号开始
//整型数组0号元素记录数字长度
void input(char s[],int p[]){
int len=strlen(s),i;
for(i=0;i<len;i++)
p[len-i]=s[i]-'0';
p[0]=len;
}
//将a+b的结果保存在a
void add(int a[],int b[]) {
int i,temp;
int len=a[0]>b[0] ?a[0]:b[0];
for(i=1;i<=len;i++){
//c[i]+=a[i]+b[i];
//a[i]+=a[i]+b[i]; 错误!
a[i]=a[i]+b[i];
if(a[i]>=10){
a[i+1]+=a[i]/10;
a[i]=a[i]%10;
}
}
if(a[len+1]!=0)
a[0]++;
}
int main(){
char s[N];
int a[N]={0},b[N]={0},c[N]={0};
int i;
printf("请输入数字串1:\n");
do{
gets(s);
if(allDigit(s))
break;
printf("请输入数字串1:\n");
}while(1);
input(s,a);
printf("请输入数字串2:\n");
do{
gets(s);
if(allDigit(s))
break;
printf("请输入数字串2:\n");
}while(1);
input(s,b);
add(a,b);
int flag=1;//flag=1时遇到的0是前导0
for(i=a[0];i>=1;i--){
if(a[i]==0&&flag&&i!=1) //结果可能为0,所以i!=1
continue;
else
flag=0;
printf("%d",a[i]);
}
printf("\n");
return 0;
}