Mathematical: Digital Root approach

This commit is contained in:
Vitor Oliveira 2021-03-18 17:00:54 -07:00
parent 50b20705b9
commit 2171cad18e
3 changed files with 44 additions and 22 deletions

View file

@ -33,10 +33,10 @@ def add_digits(num)
add_digits(sum)
end
# puts(add_digits(38))
puts(add_digits(38))
# # => 2
# puts(add_digits(284))
puts(add_digits(284))
# # => 5
#
@ -58,4 +58,4 @@ puts(add_digits(38))
# => 2
puts(add_digits(284))
# => 5
# => 5

41
maths/add_digits.rb Normal file
View file

@ -0,0 +1,41 @@
# Challenge name: Add Digits
#
# Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.
#
# Example:
#
# Input: 38
# Output: 2
# Explanation: The process is like: 3 + 8 = 11, 1 + 1 = 2.
# Since 2 has only one digit, return it.
#
# Follow up:
# Could you do it without any loop/recursion in O(1) runtime?
# @param {Integer} num
# @return {Integer}
#
# Approach: Mathematical: Digital Root
# https://en.wikipedia.org/wiki/Digital_root
#
#
# Complexity Analysis
#
# Time Complexity: O(1).
# Space Complexity: O(1).
def add_digits(num)
if num == 0
return 0
elsif num % 9 == 0
return 9
end
return num % 9
end
puts(add_digits(38))
# # => 2
puts(add_digits(284))
# # => 5

View file

@ -1,19 +0,0 @@
# Given a number, find sum of its digits.
def digits_sum(n)
a = 0
sum = 0
until n.zero?
a = n % 10
sum += a
n /= 10
end
sum
end
puts 'Sum of digits of 3456 is ' + digits_sum(3456).to_s
# Sum of digits of 3456 is 18
puts 'Sum of digits of 1234 is ' + digits_sum(1234).to_s
# Sum of digits of 1234 is 10
puts 'Sum of digits of 9251321 is ' + digits_sum(9_251_321).to_s
# Sum of digits of 9251321 is 23