高精度计算----加法运算

处理大数加法:

 1.用数组来存储每位数,对每位数进行相加运算,要依加法原则,从低位开始运算。而数组是从高位开始存储的,所以要逆序处理运算。要处理进位和当前位超9处理。

 2.这里的加法运算不包括负数计算,可以转换为相关的减法运算。

测试程序效果如下:
高精度计算----加法运算_第1张图片

一下代码包含相加函数,测试的主函数,相加函数(附带注释)直接可以使用:

#include "stdio.h" #include "stdlib.h" #include "string.h" /************************************************************************/ /* 高精度加法运算 */ /* a[]被加数,位数不限 */ /* b[]加数,位数不限 */ /* back[]结果,字符串保存 */ /************************************************************************/ void add(char a[],char b[],char back[]) { int i,j,k,up,x,y,z,l; char *c; //存储结果的逆数组 if (strlen(a)>strlen(b)) //判断位数哪个更大吗,取较长的位数,以防进位要多补一位和结束符 { l=strlen(a)+2; } else { l=strlen(b)+2; } c=(char *)malloc(l*sizeof(char)); //动态开辟char类型l长度的字符串 i=strlen(a)-1; //取实际长度 j=strlen(b)-1; k=0;up=0; //k是c数组的下标,up代表进位标志 while (i>=0 || j>=0) { if (i<0) //当被加数位数过少的话,用0前补不足 { x='0'; } else { x=a[i]; } if (j<0) //当加数位数过少的话,用0前补不足 { y='0'; } else { y=b[j]; } z=x-'0'+y-'0'; //加法运算 if (up) //对上一次的进位处理 { z+=1; } if (z>9) //超9处理 { up=1; z%=10; } else { up=0; } c[k++]=z+'0'; //存入c数组 i--; j--; } if (up) //末次进位情况 { c[k++]='1'; } c[k]='/0'; //结束符 for (k-=1,i=0;k>=0;k--) //数组逆序赋给back结果数组 { back[i++]=c[k]; } back[i]='/0'; } int main() { int n; char a[1000],b[1000],c[1000]; printf("%s","计算次数: "); scanf("%d",&n); while (n--) { memset(a,'/0',sizeof(a)); memset(b,'/0',sizeof(b)); memset(c,'/0',sizeof(c)); printf("%s","请输入被加数: "); scanf("%s",&a); printf("%s","请输入加数: "); scanf("%s",&b); add(a,b,c); printf("%s%s/n/n","加法后结果为: ",c); } return 0; }

你可能感兴趣的:(c,测试,存储,UP)