高精度计算乘法 #
- 高精度计算的乘法原理
- 高精度计算的乘法描述
- 高精度计算的乘法实现
收获 #
学完本节内容,可以初步理解并掌握高精度计算的乘法实现。
高精度计算的乘法原理 #
乘法进位原理:
c[i+j]= a[i]*b[j] + x + c[i+j]; x = c[i+j]/10; c[i+j] %= 10;
高精度计算的乘法描述 #
类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位,同时对每一位进行乘法运算时,必须进行错位相加,如图3、图4。
分析c数组下标的变化规律,可以写出如下关系式:ci = c’i +c”i +…由此可见,c i跟a[i]*b[j]乘积有关,跟上次的进位有关,还跟原c i的值有关,分析下标规律,则算法描述如下:
int c[20]; void add(int a[],int b[]) //a,b,c都为数组,分别存储被乘数、乘数、结果 { int i=1,x=0; //x是进位 for i<=a数组长度: for j<=b数组长度: { c[i+j]= a[i]*b[j]+ x + c[i+j]; //第i+j位相加并加上次的进位 x=c[i+j]/10 ; //向高位进位 c[i+j]%=10; //存储第i+j位的值 i++; //位置下标变量 } }
高精度计算的乘法实现 #
python实现代码如下:
#-------------对输入的数字进行数组形式进行倒序储存---------------------- a=input('请输入一个数字a') b=input('请输入一个数字b') a1=[0]*10#定义10位的数据长度 b1=[0]*10 la = len(a)#用a[0]计算字符串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]*20#定义一个20位的数组 x=0#x为计算后的进位值 for i in range(10):#i=0,1假设两位数 for j in range(10):#j=0,1,2假设三位数 #下面思路同加法进位思路相同 c[i+j]=a1[i]*b1[j]+x+c[i+j]#错位相加,加上原位置的数值 x=c[i+j]//10 c[i+j]=c[i+j]%10 c.reverse() #删除先导0 while c[0]==0: c=c[1:] print(c)
小结 #
理解并掌握高精度计算乘法的原理
用代码实现高精度计算的乘法运行
习题 #
- 习题1:通过“打竖式”的数学计算方法解释并模拟高精度计算乘法
- 习题2:仿照高精度计算乘法,用代码实现‘25‘x’387‘的结果