logo
Problems

Add Digits

Problem

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

Example

Given num = 38. The process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return 2.

Solution

A math trick: the sum of digits mod 9 is the same as the number mod 9. For example:

  • 38 % 9 = 2, (3 + 8) % 9 = 11 % 9 = 2
  • 111 % 9 = 3, (1 + 1 + 1) % 9 = 3
  • 18 % 9 = 0, (1 + 8) % 9 = 0

However there's one exception in this problem: 9 % 9 = 0 but 9 is a single digit so should return 9 instead of 0. To handel this, we can either

return num % 9  == 0  ? 9 : num % 9

or

return 1 + (num - 1) % 9

Online Judge