python计算二个数相乘_Python大数运算之竖式乘法程序

python内置了大数运算方法,可以说是非常方便的。为了检验自己的学习水平,就试着写了个模拟竖式乘法的小程序,要达的效果是可以计算任意位数乘法。

竖式计算是什么?它是指在计算过程中列一道竖式计算,使计算简便

2-16040R24521395.jpg

123456709

* 1234567890987654321

----------------------------

123456709

246913418

370370127

493826836

617283545

740740254

864196963

987653672

1111110381

000000000

1111110381

987653672

864196963

740740254

617283545

493826836

370370127

246913418

123456709

----------------------------

152415688858406562100289589

Elapsed time: 0.10666831 seconds

1234567890987654321

* 123456709

----------------------------

11111111018888888889

0000000000000000000

8641975236913580247

7407407345925925926

6172839454938271605

4938271563950617284

3703703672962962963

2469135781975308642

1234567890987654321

----------------------------

152415688858406562100289589

Elapsed time: 0.05573613 seconds

#--------www.iplaypy.com-------------

#! /urs/bin/env python

from mytictoc import tic, toc

# big intiger multiplication

def bigmul(a,b):

sa = str(a)

sb = str(b)

resultline = ' '*(len(sa)+len(sb))

# a

# * b

print

print resultline[:-len(sa)]+sa

print '*'+resultline[:-len(sb)-1]+sb

# ---

print '-'*(len(sa)+len(sb))

# ###

# ###

# ###

result_list = []

cursp = 0

for db in sb[::-1]:

if int(db)==0:

result = '0'*len(sa)

else:

result = ''

carrier = 0

for da in sa[::-1]:

#print db,da

mr = int(db)*int(da)+carrier

carrier = mr/10

result += str(mr%10)

if carrier!=0:

result += str(carrier)

result = result[::-1]+' '*cursp

cursp += 1

result_list.append(resultline[:-len(result)]+result)

print result_list[-1]

# ----

print '-'*(len(sa)+len(sb))

# result

print str(sum([int(x.replace(' ','0')) for x in result_list]))

# unit test

def main():

a = 1234567890987654321

b = 123456709

tic()

bigmul(b,a)

toc()

tic()

bigmul(a,b)

toc()

if __name__=='__main__':

main()

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/algorithm/a2445.html

相关文章 Recommend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值