题目:编写两个任意位数的大数相乘的程序,给出计算结果。
逐位相乘处理进位法
乘积是逐位相乘,也就是aibj,结果加入到积C的第i+j位,最后处理进位即可,例如:A =17 = 1*10 + 7 = (7,1)最后是十进制的幂表示法,幂次是从低位到高位,以下同。
B=25 = 2*10 + 5 = (5,2);C = A * B = (7 * 5, 1 * 5 + 2 * 7, 1 * 2) = (35, 19, 2) = (5, 22, 2) = (5, 2. 4)=425。
原博客的思路为:
(1)转换并反转,字符串转换为数字并将字序反转;
(2)逐位相乘,结果存放在result_num[i+j]中;
(3)处理进位,消除多余的0;
(4)转换并反转,将计算结果转换为字符串并反转。
代码如下:
import sys
str1=raw_input()
str2=raw_input()
str1=str1[::-1]
str2=str2[::-1]
result=[0 for i in range(len(str1)+len(str2))]
for i in range(len(str1)):
for j in range(len(str2)):
result[i+j]=result[i+j]+int(str1[i])*int(str2[j])
for i in range(len(result)):
if int(result[i])>10:
result[i+1] += result[i]/10
result[i] %= 10
result.reverse()
result=map(str,result)
if result[0]=='0':
print ''.join(result[1:])
else:
print ''.join(result)