今天开始尝试高精度加法
之前看过别人的思路于是决定自己写写,但总觉得写起来难受,于是把
思路转化成12122+6611→012122+006611
只是后面不知道咋交换s1,s2;所以只能勉强用if语句写了一大堆,所幸还是通过那题了
这里我们使用12122+6611或6611+12122作为案例
#include<stdio.h>
#include<string.h>
int inte(char c)
{
if(c=='1')return 1;if(c=='2')return 2;if(c=='3')return 3;if(c=='4')return 4;if(c=='5')return 5;
if(c=='6')return 6;if(c=='7')return 7;if(c=='8')return 8;if(c=='9')return 9;
if(c=='0')return 0; //差点忘了捏
}
int main(void)
{
char s1[505],s2[505];
scanf("%s",s1);scanf("%s",s2);int i;
int len1=strlen(s1);int len2=strlen(s2);
int a[510]={0},b[510]={0},c[510]={0},d[505]={0};//初始为0,以便后边计算
char s20[1000];//s2的补0的数组
char s10[1000];//s1的补0的数组
char o[600];o[0]='0';
int count=0;
if(len1>=len2){
strcat(o,s1);//12122→012122
for(i=0;i<=len1-len2;i++)
{
s20[i]='0'; 为s2=“6611“补0
}
strcat(s20,s2);6611→006611
for(i=len1;i>=0;i--)//从数组最后往前加
{
a[i]=inte(o[i]); //将012122各位字符转换成对应的数字
b[i]=inte(s20[i]);
if(a[i]+b[i]+c[i]>=10){
c[i-1]=1;} 的本身的两个数字加上那个由后一位进的0或1大于零,则前一位要多加1
d[i]=(a[i]+b[i]+c[i])%10;
}
if(d[0]==0)count=1;
for(i=count;i<=len1;i++)
{
printf("%d",d[i]);
}
}
if(len1<len2)//糟糕的if语句,重复上述步骤
{
strcat(o,s2);
for(i=0;i<=len2-len1;i++)
{
s10[i]='0';
}
strcat(s10,s1);
for(i=len2;i>=0;i--)
{
a[i]=inte(o[i]);
b[i]=inte(s10[i]);
if(a[i]+b[i]+c[i]>=10){
c[i-1]=1;}
d[i]=(a[i]+b[i]+c[i])%10;//差点忘了要加c[i]
}
if(d[0]==0)count=1;
for(i=count;i<=len2;i++)
{
printf("%d",d[i]);
}
}
return 0;
}