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 に答える