今天室友面試了,居然掛到了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陣列中,如果不想要全域性...