跳至正文
View Categories

1 min read

高精度计算加法 #

  1. 高精度计算的加法原理
  2. 高精度计算的加法描述
  3. 高精度计算的加法实现

收获 #

学完本节内容,可以初步理解并掌握高精度计算的加法实现。

高精度计算的加法原理 #

加法进位原理:逢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. 习题1:根据所学内容,尝试用高精度计算的方式定义并储存一个位数为50的数字
  2. 习题2:通过“打竖式”的数学计算方法解释并模拟高精度计算加法
  3. 习题3:仿照高精度计算加法,用代码实现‘1234‘+’876‘的结果