0

还记得你在小学学习携带数字的时候吗?

例子:

  123
+ 127
-------
  250

您将 1 从3+7上移到下一列,然后将第一列更改为 0?

无论如何,我得到的是我想制作一个程序来计算2个数字产生的进位数(加法)。

我这样做的方式是将两个数字都转换为字符串,将它们拆分为个体,然后将它们转换回整数。之后,我一次加 1,当一个数字是 2 位时,我会从它减去 10 并移动到下一列,边走边计算。

问题是,我几乎不知道该怎么做,而且听起来也很慢。
到目前为止,这是我的代码。

numberOne = input('Number: ')
numberTwo = input('Number: ')
listOne = [int(i) for i in str(numberOne)]
listTwo = [int(i) for i in str(numberTwo)]

然后......我不知道该怎么办。有人可以帮忙吗?

编辑:
一些澄清。
这也适用于浮点数。
这只计算它携带的次数,而不是携带的数量。9+9+9 为 1,9+9 也为 1。
数字长度不一样。

4

1 回答 1

2
>>> def countCarries(n1, n2):
...     n1, n2 = str(n1), str(n2) # turn the numbers into strings
...     carry, answer = 0, 0 # we have no carry terms so far, and we haven't carried anything yet
...     for one,two in itertools.zip_longest(n1[::-1], n2[::-1], fillvalue='0'): # consider the corresponding digits in reverse order
...             carry = int(((int(one)+int(two)+carry)//10)>0) # calculate whether we will carry again
...             answer += ((int(one)+int(two)+carry)//10)>0 # increment the number of carry terms, if we will carry again
...             carry += ((int(one)+int(two)+carry)//10)>0 # compute the new carry term
...     return answer
... 
>>> countCarries(127, 123)
1
>>> countCarries(127, 173)
2
于 2013-08-31T01:25:20.877 回答