[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))

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

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

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

上一篇
浅谈SSRF
发表评论 / Comment

用心评论~