今天室友面试了,居然挂到了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不需要实现大整数相乘…