大整数运算是我们经常会碰到的算法面试题之一。大整数运算往往会导致整形溢出而不能在ide直接通过四则运算运行。
下面是python3写的大整数相乘和大整数相加函数。原理都较为相似,模拟手写演算的场景从后往前计算并且考虑进位。
def multy(n1,n2):
n1=str(n1)[::-1]
n2=str(n2)[::-1]
n3=[]
for i in range(len(n1+n2)):
n3.append(0)
for i in range(len(n1)):
for j in range(len(n2)):
n3[i+j]+=int(n1[i])*int(n2[j])
for i in range(len(n1+n2)):
if n3[i]>=10:
n3[i+1]+=n3[i]//10
n3[i]%=10
return n3[::-1]
def plus(n1,n2):
n1=str(n1)[::-1]
n2=str(n2)[::-1]
n3=[]
for i in range(max(len(n1),len(n2))+1):
n3.append(0)
jinwei=0
for i in range(min(len(n1),len(n2))):
dangqian=(jinwei+int(n1[i])+int(n2[i]))
if dangqian>=10:
jinwei=dangqian//10
dangqian=dangqian%10
n3[i]+=dangqian
i+=1
if len(n1)>=len(n2):
while(i<len(n1)):
dangqian = (jinwei + int(n1[i]))
if dangqian >= 10:
jinwei = dangqian // 10
dangqian = dangqian % 10
n3[i] += dangqian
i+=1
else:
while (i < len(n2)):
dangqian = (jinwei + int(n2[i]))
if dangqian >= 10:
jinwei = dangqian // 10
dangqian = dangqian % 10
n3[i] += dangqian
i+=1
return n3[::-1]
print(multy(99,99))
print(99*99)
print(plus(15,250123))