高精度运算(加法)
高精度运算是指超出了范围的运算,都可以用小学的竖式计算来做;
加法:例如
我们可以用字符数组来存数的每一个位数,用strlen()求出长度。再用整型数组存字符数组-‘0’;两个数组的每一个位数各自相加,让大于10的数进位,再模除于10;得出的结果的长度是我们要两个数长度最大的长度,最后有可能因为进位而长度加1,别忘了判断一下;
图片表示:
我们用一个题来举个例子:
题目:A+B problem 高精(洛谷 p1601)分别在两行内输入两个500位以内的十进制非负整数,求它们的和
代码:
#include<stdio.h>
#include<string.h>
#define max 500
int main(){
char A[max],B[max];
int a[max],b[max],c[max]={0},zlen,alen,blen,i,j;
scanf("%s%s",A,B);
alen=strlen(A);
blen=strlen(B);
zlen=alen;
if(zlen<blen){
zlen=blen;
}
for(i=alen-1,j=1;i>=0;i--,j++){
a[j]=A[i]-'0';
}
for(i=blen-1,j=1;i>=0;i--,j++){
b[j]=B[i]-'0';
}
for(i=1;i<=zlen;i++){
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}
if(c[zlen+1]!=0){
zlen++;
}
for(i=zlen;i>=1;i--){
printf("%d",c[i]);
}
return 0;
}