加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

算法题-大数相乘问题

发布时间:2020-12-14 05:03:37 所属栏目:大数据 来源:网络整理
导读:题目:编写两个任意位数的大数相乘的程序,给出计算结果。 逐位相乘处理进位法 乘积是逐位相乘,也就是aibj,结果加入到积C的第i+j位,最后处理进位即可,例如:A =17 = 1*10 + 7 = (7,1)最后是十进制的幂表示法,幂次是从低位到高位,以下同。 B=25 = 2*1

题目:编写两个任意位数的大数相乘的程序,给出计算结果。

逐位相乘处理进位法

乘积是逐位相乘,也就是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.?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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读