Rob Alsod
Rob Alsod

Reputation: 2945

Python 3.3.2 - Calculating the Carrying of Numbers

Remember back in primary school where you learn to carry numbers?

Example:

  123
+ 127
-------
  250

You carry the 1 from 3+7 over to the next column, and change the first column to 0?

Anyway, what I am getting at is that I want to make a program that calculates how many carries that the 2 numbers make (addition).

The way I am doing it, is that I am converting both numbers to strings, splitting them into individuals, and turning them back into integers. After that, I am going to run through adding 1 at a time, and when a number is 2 digits long, I will take 10 off it and move to the next column, calculating as I go.

The problem is, I barely know how to do that, and it also sounds pretty slow.
Here is my code so far.

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

And then... I am at a loss for what to do. Could anyone please help?

EDIT:
Some clarification.
This should work with floats as well.
This only counts the amount of times it has carried, not the amount of carries. 9+9+9 will be 1, and 9+9 will also be 1.
The numbers are not the same length.

Upvotes: 0

Views: 1900

Answers (1)

inspectorG4dget
inspectorG4dget

Reputation: 113975

>>> 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

Upvotes: 2

Related Questions