number1 = int(input('Number #1: '))
number2 = int(input('Number #2: '))
l = len(str(number1))
l1 = len(str(number2))
print()
def addition():
print(' ',max(number1,number2))
print('+')
print(' ',min(number1,number2))
print('-'*(max(l,l1)+2))
print(' ')
print(' ',number1+number2)
def carries():
while (int(str(number1)[::-1])+int(str(number2)[::-1]))>=10:
carries = 0
carries = carries + 1
return carries
addition()
print()
print('Carries : ',carries())
我正在尝试制作一个程序,它可以添加两个用户输入数字并计算答案,同时还说明有多少个载体。携带如果9 + 8 = 17,那么将有1个进位等等。我的节目超过1次携带时遇到问题。所以到目前为止这个程序只适用于添加时低于99的用户输入数字。如果你能向我解释我将如何改变这个程序以使其适用于任何数字,那就太棒了。我正在考虑使用len(number1)和len(number2)然后向后输入用户输入的字符串,所以它看起来像str(number1 [:: - 1]))但我不认为它的工作原理是这样的。
答案 0 :(得分:0)
while 循环存在致命缺陷。
这是一个适合你的开始,基于你的原始程序。
只要两个数字中都有数字,就抓住数字(从右端移动)并查看它们的数字和是否需要进位。如果是,请递增计数。
def carry(): carry_count = 0 str1 = str(number1) str2 = str(number2)
for digit_pos in range(1, min(len(str1), len(str2)) + 1):
if int(str1[-digit_pos]) + int(str2[-digit_pos]) >= 10:
carry_count += 1
return carry_count
示例输出:
Number #1: 77077
Number #2: 4444
77077
+
4444
-------
81521
Carries : 3
这仍有一些不足之处需要你解决。最值得注意的是,它不能处理多个载体。但是,它应该让你走向解决方案。
答案 1 :(得分:0)
我重写了你的进位函数,所以它有效,但实现完全不同。首先创建数字字符串,以便迭代它们。然后通过附加0来使它们等长,并遍历每个数字以检查它们的总和(加上进位)是否超过9.如果是,则递增计数器。希望这会有所帮助:
number1 = int(input('Number #1: '))
number2 = int(input('Number #2: '))
l = len(str(number1))
l1 = len(str(number2))
print()
def addition():
print(' ',max(number1,number2))
print('+')
print(' ',min(number1,number2))
print('-'*(max(l,l1)+2))
print(' ')
print(' ',number1+number2)
def carries():
num1 = str(number1)
num2 = str(number2)
carry = 0
carries = 0
c1 = l
c2 = l
if (l < l1):
while (c1 < l1):
num1 = '0' + num1
c1+=1
if (l1 < l):
while (c2 < l):
num2 = '0' + num2
c2+=1
i = c1
while (i > 0):
if (int(num1[i-1])+int(num2[i-1])+carry > 9):
carry = 1;
carries+=1
else:
carry = 0
i-=1
return carries
addition()
print()
print('Carries : ',carries())
使用快速修复编辑
答案 2 :(得分:0)
def numberOfCarryOperations(a, b):
f=lambda n:sum(map(int,str(n)));return(f(a)+f(b)-f(a+b))/9
# f is the digitSum function :)
断言a,b> = 0,你可以用数学证明:每次进位时,digitSum减少9。
9,因为我们在数字系统10中,所以我们输了10&#34;如果我们携带一个数字,我们获得+1作为进位。def digitSum(n):
return sum(map(int,str(n)))
def numberOfCarryOperations(a, b)
# assert(a >= 0); assert(b >= 0);
return (digitSum(a) + digitSum(b) - digitSum(a+b)) / 9