#include <stdio.h>
#include <string.h>
#define MAX 200 //大数最长位数
int main()
{
char str1[MAX];
char str2[MAX];
char ans[MAX+MAX+1]; //用char型节省空间
int len1,len2,bit,i,flag;
memset(ans,0,sizeof(ans));
printf("Please input a big number:");
scanf("%s",str1);
printf("Please input another big number:");
scanf("%s",str2);
len1=strlen(str1)-1;
len2=strlen(str2)-1;
bit=0;
while(len1 >= 0 && len2 >= 0) //相同位数相加
ans[bit++]=str1[len1--]-'0'+str2[len2--]-'0';
while(len1 >= 0) //str1多出的位放在结果里面
ans[bit++]=str1[len1--]-'0';
while(len2 >= 0) //str2多出的位放在结果里面
ans[bit++]=str2[len2--]-'0';
//deal jinwei
len1=strlen(str1);
len2=strlen(str2);
for(i=0;i<(len1>len2?len1:len2)+1;i++) //处理进位,结果最长不会超过最长的数字位数+1
if(ans[i]>=10)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
//print
printf("%s + %s = ",str1,str2);
if(str1[0]=str2[0]==48) //处理 0+0=0
{
printf("0 \n");
return 0;
}
flag=0;
for(bit=len1+len2-1;bit>=0;bit--) //倒找第一位,即第一个非 \0
{
if(ans[bit] != '\0') flag=1;
if(flag) printf("%d",ans[bit]);
}
putchar('\n');
return 0;
}
高精度加法
最新推荐文章于 2022-10-05 20:27:18 发布