今天室友面试了,居然挂到了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
不需要实现大整数相乘…
上一篇
浅谈SSRF
浅谈SSRF
版权声明:《 [Python]大整数相乘 》为DYBOY原创文章,转载请注明出处!
最后编辑:2019-9-21 22:09:09