2013-08-31 5 views
0

숫자를 가르치는 초등 학교를 기억하고 계십니까?파이썬 3.3.2 - 숫자 운반 계산하기

예 :

123 
+ 127 
------- 
    250 

당신은 (1) 다음 칼럼을 통해 3+7에서 운반, 0에 첫 번째 열을 변경?

어쨌든, 내가 받고있는 것은 이 얼마나 많은지 계산하는 프로그램을 만들고 싶다는 것입니다.은 2 개의 숫자가 (덧셈)을 만드는 숫자입니다.

내가하고있는 방식은 두 숫자를 문자열로 변환하고 개별 숫자로 분할하여 다시 정수로 변환하는 것입니다. 그 후, 나는 을 한 번에 하나씩 추가하여 실행하며, 숫자가 2 자리 숫자 일 때, 나는 10을 빼고 다음 열로 이동하여 계산합니다.

문제는 내가 거의 그 일을하는 법을 알고 있으며, 또한 꽤 느립니다.
여기 내 코드가 있습니다.

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

그리고 나서 ... 나는 무엇을 해야할지를 놓치고 있습니다. 아무도 도와 줄 수 없습니까?

편집 :
몇 가지 설명.
이것은 float에서도 작동합니다.
이것은 운반 한 횟수가 아니라 운반 한 횟수를 계산합니다. 9 + 9 + 9는 1이되고 9 + 9도 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 
+0

멋진 예. 매우 비약 해 보이며 완벽하게 작동합니다. –

관련 문제