【发布时间】:2019-06-19 14:09:51
【问题描述】:
我正在尝试解决乘法问题。我知道 Python 支持非常大的数字并且可以做到,但我想做的是
输入 2 个数字作为字符串。
将这两个数字相乘,就像我们以前在学校做的那样。
基本想法是将下面链接中给出的代码转换为 Python 代码,但我不太擅长 C++/Java。我要做的是理解下面链接中给出的代码并将其应用于 Python。
https://www.geeksforgeeks.org/multiply-large-numbers-represented-as-strings/
我被困在加法点。 我想像下面给出的图片那样做
所以我制作了一个列表,将第一个数字的 ith 数字的值存储到 jth 秒数。请帮我解决加法部分。
def mul(upper_no,lower_no):
upper_len=len(upper_no)
lower_len=len(lower_no)
list_to_add=[] #saves numbers in queue to add in the end
for lower_digit in range(lower_len-1,-1,-1):
q='' #A queue to store step by step multiplication of numbers
carry=0
for upper_digit in range(upper_len-1,-1,-1):
num2=int(lower_no[lower_digit])
num1=int(upper_no[upper_digit])
print(num2,num1)
x=(num2*num1)+carry
if upper_digit==0:
q=str(x)+q
else:
if x>9:
q=str(x%10)+q
carry=x//10
else:
q=str(x%10)+q
carry=0
num=x%10
print(q)
list_to_add.append(int(''.join(q)))
print(list_to_add)
mul('234','567')
我有[1638,1404,1170] 作为函数调用mul('234','567') 的结果我应该添加这些数字但因为必须为每个列表移动这些数字而卡住了。例如,1638 应该添加为 16380 + 1404,其中 6 与 4 对齐,3 与 0 对齐,8 与 4 对齐,依此类推。喜欢:
1638
1404x
1170xx
--------
132678
--------
【问题讨论】:
-
您可能会发现这很有价值 - RosettaCode Python 任务。
-
@GuyCoder 是的,有一个关于同一问题的链接,但我无法理解,因为所有这些 Python 东西对我来说都是新事物。
-
所以,如果我理解正确,您的问题可以简化为 1)如何将列表中的元素提高到 10 的幂(1、10、100、...)和 2)如何获得结果列表的总和。这是正确的吗?
-
@Georgy 类似这样的东西。但我想将两个非常大的数字相乘(比如非常大),然后像所示图片一样将它们相乘。我有 ** [1638,1404,1170]** 作为函数调用 mul('234','567') 的结果。我现在无处可去。我应该添加这些数字但卡住了,因为必须为每个列表移动这些数字。例如 1638 应该添加为 16380 + 1404,其中 6 与 4 对齐,3 与 0 对齐,8 与 4 对齐,依此类推。我该如何换班?
-
图片不正确。您需要注意水平放置。通常,我会用越来越多的零填充。但是您可以将行号添加到索引中。祝你好运。
标签: python python-3.x string multiplication