python长整数相乘_[Python]大整数相乘

今天室友面试了,居然挂到了ByteDance的二面,其中考了一个大整数相乘,那么我就尝试借助Python再来写一遍吧!

实现思路很简单,平时我们咋计算乘法的,就按照公式计算就好了,程序中就是要考虑好边界条件

与此同时,结合一下编程语言的特性,也会使得代码更加精简。

# -*- coding:utf-8 -*-

# author: DYBOY

# time: 2019-9-21 21:53:03

# desc: 大数相乘

# 字符串分割为list

def str_split(strs):

str_arr = []

for char in strs:

str_arr.append(char)

return str_arr

# 大数相加

def big_add(a_str, b_str):

aa = str_split(a_str)

bb = str_split(b_str)

sum_str = ''

c = 0

while len(aa) or len(bb) or c:

try:

a = int(aa.pop())

except:

a = 0

try:

b = int(bb.pop())

except:

b = 0

c += a + b

sum_str = str(c % 10) + sum_str

c = c > 9

return sum_str

# 大数相乘之大数*个位数

def single_mutipule(a_str, b_char):

aa = str_split(a_str)

b = int(b_char)

sum_str = ''

c = 0

while len(aa) or c:

try:

a = int(aa.pop())

except:

a = 0

mu = a * b + c

sum_str = str(mu % 10) + sum_str

if mu > 9:

c = int((str(mu))[:-1])

else:

c = 0

return sum_str

# 大数相乘

def mutipule(a_str, b_str):

aa = str_split(a_str)

bb = str_split(b_str)

sums_arr = []

sum_str = ''

for idx,b in enumerate(bb):

a_b1 = single_mutipule(aa, b) + idx * '0'

sums_arr.append(a_b1)

for s in sums_arr:

sum_str = big_add(sum_str, s)

return sum_str

if __name__ == '__main__':

s1 = '4174468421068499'

s2 = '99861646849'

print(mutipule(s1, s2))

虽然网上很多大神写了一些特别漂亮的代码,但是一串儿的循环嵌套,数组取值,脑内循环,太猛了

此方法将部分计算过程拆分为函数,相信对于大家的理解更有帮助

另外补充一句,python的int类型是无限精度的,所以python不需要实现大整数相乘…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值