高精度计算加法 #
- 高精度计算的加法原理
- 高精度计算的加法描述
- 高精度计算的加法实现
收获 #
学完本节内容,可以初步理解并掌握高精度计算的加法实现。
高精度计算的加法原理 #
加法进位原理:逢10进1,当某位置的和超过10的时候,该位置数据保留个位数,下一位置数据+1,原理可以简单表示为:
c[i]=a[i]+b[i]; if (c[i]>=10) { c[i]%=10; ++c[i+1]; }
高精度计算的加法描述 #
写出两个整数相加的竖式表达,如图1所示。如果用数组A、B分别存储加数和被加数,用数组C存储结果。
则上例有A[1]=6,A[2]=5, A[3]=8,B[1]=5,B[2]=5,B[3]=2,C[4]=1,C[3]=1,C[2]=1,C[1]=1,两数相加如图2所示。
因此,算法描述如下:
int c[10]; void add(int a[],int b[]) //a,b,c都为数组,分别存储被加数、加数、结果 { int i=1,x=0; //x是进位 while ((i<=a数组长度)||(i<=b数组的长度)) { c[i]=a[i]+b[i]+x; //第i位相加并加上次的进位 x=c[i]/10; //向高位进位 c[i]%=10; //存储第i位的值 i++; //位置下标变量 } }
高精度计算的加法实现 #
python实现代码如下:
#-------------对输入的数字进行数组形式进行倒序储存---------------------- a=input('请输入一个数字a') b=input('请输入一个数字b') a1=[0]*10#定义10位的数据长度 b1=[0]*10 la = len(a) lb= len(b) #ord()将字符转化为ASCII码;chr()将ASCII码转化为字符 #倒序储存,原因是计算数值从低位算起,即从数组a1[0]处开始计算 for i in range(la): a1[i]=ord(a[la-i-1])-ord('0')#将数串a转换为数组a1,并倒序存储(-0对应的相对数值,变成数组储存) for j in range(lb): b1[j] = ord(b[lb-j-1]) - ord('0') #----------高精度计算之加法运算,注意进位--------- c=[0]*10#初始化储存数组 clen=0#clen为计算后的位数 x=0#x为计算后的进位值 while clen<10:#定义的位数 c[clen]=a1[clen]+b1[clen]+x x=c[clen]//10#对10取模,判断是否进位,如为0,则不需要进位;为1,需要进位 c[clen]=c[clen]%10#对10取余数,即为该位数上的值 clen+=1 c.reverse()#将数组c倒序输出 #删除先导0 while c[0]==0: c=c[1:] print(c)
小结 #
理解并掌握高精度计算加法的原理
用代码实现高精度计算的加法运行
习题 #
- 习题1:根据所学内容,尝试用高精度计算的方式定义并储存一个位数为50的数字
- 习题2:通过“打竖式”的数学计算方法解释并模拟高精度计算加法
- 习题3:仿照高精度计算加法,用代码实现‘1234‘+’876‘的结果