python長整數相乘 Python 大整數相乘

2021-10-18 16:00:02 字數 1755 閱讀 1819

今天室友面試了,居然掛到了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:

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'

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不需要實現大整數相乘…

python整數和列表 列表和整數Python

假設實際縮排如下 specialnum 10 def number move move number for elements in range len move number if specialnum move number 1 x move number.index specialnum y ...

大整數相乘

一 乘數和被乘數為long型別的 public class bignumberchenglong int pi1 new int getlength p1 int pi2 new int getlength p2 將乘數和被乘數存入陣列中 long temp p1 int num 0 int i 0...

大整數相乘

這是一道經典的上機題目 include include include define n 100 n代表乘數的位數,根據具體應用,想設多大設多大。function 大整數相乘演算法 引數 a 乘數 b 乘數 n a的長度 m b的長度 沒有返回值,結果直接放到全域性變數res陣列中,如果不想要全域性...