我发现了新型的乘法计算方法,请大家查看!

大家都知道我们在小学的时候学到过乘法计算,我们通常采用的是竖式计算如图在这里插入图片描述
这应该是大家小学最常用的吧,他最大的数就是999=891(按两位数两位数计算),当然这个也不大,但是不细心的小朋友就会计算错误,这不是一个好方法,所以说我下面介绍一下我写的一个好方法。
在这里插入图片描述
这是我的计算过程,看起来有点复杂,请让我慢慢介绍.

  1. 首先把数字分成两位数就是分开来计算,如图(9876分开成9 8 7 6)
  2. 交叉相乘保证每位数都互相乘起来(写出来,这保证最大不超过81)
  3. 然后排列起来,计算出来每项的和,放在原来的位置上。
  4. 然后加起来进位,也许这个比上面会复杂点,所有我给了过程图片。
    在这里插入图片描述
    看起来有点复杂,我们的小学生可能看不懂,但是初中生一般都看得懂,这不就是多项式的计算吗?或许有些人会问这个还不如小学生列竖列简单,但是如果数字位数多了就不能用此方法了,因为项数太多了,容易出现错误。所以我下面给出了一个方法。
    在这里插入图片描述
    也许还是有点复杂,不过我会慢慢解释。
  5. 首先也是分解位数,我这里用数组替代。
  6. 也是交叉相乘,保证每一项不存在漏乘。
  7. 当然是整理出来写出来啊!
  8. 然后看看下标,这是根据总下标之和减去该项下标,计算出来的。当然也可以看成个位数是1,十位数是10,百位数是100,这样也可以啊。
  9. 然后计算出来进位OK。
    在这里插入图片描述
    这就是计算的过程,虽然有点乱,看是能看的,所以说这样能保证最大不超过99啊。避免了错误率。
    所以我上面给的98
    76的计算过程应该是这样的!
    在这里插入图片描述
    在这里插入图片描述
    OK,经过验算完全正确,所以我这种方法可以推广到n位的乘法当中,完全避免了传统竖式计算的弊端(如果有问题请指出来),下面我写了一个python程序实现了我的功能。
import time
import math
multiplier1,multiplier2=0,0
count1,count2=0,0
Multiply1,Multiply2=1,1
i,i1=0,0
he=0
scount1=0
scount2=0
a=[0]*100000
b=[0]*100000#前面都是在定义变量
print("Please enter two multipliers")#提示输入数字
multiplier1=int(input())#输入数字
multiplier2==int(input())#输入数字
time_start=time.time()#计算代码速度
count1=scount1=int(math.log10(multiplier1)+1)#计算数字A的位数
count2=scount2=int(math.log10(multiplier2)+1)#计算数字B的位数
while (scount1>0):#分解位数下同
    a[scount1]=multiplier1%10#分解位数存入数组
    multiplier1//=10#数字变小
    scount1=scount1-1#下标变小
while (scount2>0):
    b[scount2]=multiplier2%10
    multiplier2//=10
    scount2=scount2-1  
for i in range(1,count1+1):#循环下标
    for i1 in range(1,count2+1):#循环下标
        sum=count1+count2-(i+i1)+1#计算10的次方数
        he=he+a[i]*b[i1]*pow(10,count1+count2-(i+i1))#累加a[n]*b[m]*10^i
        print(a[i],b[i1],he,pow(10,count1+count2-(i+i1)),count1+count2,i1+i)#输出计算过程
time_end=time.time()#计时结束
print('totally cost',time_end-time_start)#输出代码时间    
print(he)#输入计算结果






猜你喜欢

转载自blog.csdn.net/shanyoufengfu/article/details/100034498