mirror of
https://github.com/TheAlgorithms/Ruby
synced 2025-01-29 20:34:27 +01:00
Mathematical: Digital Root approach
This commit is contained in:
parent
50b20705b9
commit
2171cad18e
3 changed files with 44 additions and 22 deletions
|
@ -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
41
maths/add_digits.rb
Normal 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
|
|
@ -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
|
Loading…
Add table
Reference in a new issue