信息学奥赛一本通算法(C++版)基础算法:高精度计算
高精度加法(大位相加) #include
char a1[100],b1[100];
int a[100],b[100],c[100];//a,b,c分别存储加数,加数,结果 int lena,lenb,lenc,x,i;
memset(a,0,sizeof(a));//数组a清零 memset(b,0,sizeof(b));//数组b清零 memset(c,0,sizeof(c));//数组c清零 //gets(a1); //gets(b1); //getchar();
while(scanf(\ {
lena=strlen(a1); lenb=strlen(b1); for(i=0;i<=lena;i++)
a[lena-i]=a1[i]-'0';//将数串a1转化为数组a,并倒序存储 //a[i]=a1[lena-i-1]-48; for(i=0;i<=lenb;i++)
b[lenb-i]=b1[i]-'0';//将数串a1转化为数组a,并倒序存储 //b[i]=b1[lenb-i-1]-48;
lenc=1; //lenc表示第几位 x=0; //x是进位 while(lenc<=lena||lenc<=lenb) {
c[lenc]=a[lenc]+b[lenc]+x;//第lenc位相加并加上次的进位 x=c[lenc]/10;//向高位进位
c[lenc]%=10;//存储第lenc位的值 lenc++;//位置下标变量 }
c[lenc]=x; if(c[lenc]==0)
lenc--; //处理最高进位 for(i=lenc;i>=1;i--) cout< return 0; } 高精度减法(大位相减) #include char n[256],n1[256],n2[256]; int a[256],b[256],c[256]; int lena,lenb,lenc,i; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); while(scanf(\为被减数,n2为减数 { if(strlen(n1) strcpy(n,n1);//将n1数组的值完全赋值给n数组 strcpy(n1,n2); strcpy(n2,n);//处理被减数和减数时,交换被减数和减数 cout<<\交换了减数和被减数,结果为负数 } lena=strlen(n1); lenb=strlen(n2); for(i=0;i<=lena;i++) a[lena-i]=(int)(n1[i]-'0');//被减数放入数组a中 for(i=0;i<=lenb;i++) b[lenb-i]=(int)(n2[i]-'0');//减数放入数组b中 i=1; while(i<=lena||i<=lenb) { if(a[i] a[i]+=10;//不够减,那么向高位借1当10 a[i+1]--; } c[i]=a[i]-b[i];//对应位相减 i++; }