patternjavaModerate
Calculate Digital Root
Viewed 0 times
digitalrootcalculate
Problem
Here's my solution for finding the digital root of a number. Just for purposes of completion, a digital root is:
"If you take the digits of any number and add them together, and then
add the digits of the resulting number together, and continue doing
that until you get a single digit, that single digit is the digital
root of the original number."
What I was hoping for, is if you guys could take a look and provide a cleaner solution. I'm trying to better myself for an upcoming competition.
"If you take the digits of any number and add them together, and then
add the digits of the resulting number together, and continue doing
that until you get a single digit, that single digit is the digital
root of the original number."
What I was hoping for, is if you guys could take a look and provide a cleaner solution. I'm trying to better myself for an upcoming competition.
import java.util.Scanner;
import java.util.StringTokenizer;
public class DigialRoot {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter a number: ");
System.out.println();
String str = sc.nextLine();
String[] numbers = str.split("");
int[] myList = new int[numbers.length];
for(int i=0; i < numbers.length; i++){
myList[i] = Integer.parseInt(numbers[i]);
}
//add all numbers together
int sum = 0;
for(Integer x : myList){
sum += x;
}
//break down and add sum
String sumStr = Integer.toString(sum);
String[] nums = sumStr.split("");
int[] nxtList = new int[nums.length];
for(int i=0; i < nums.length; i++){
nxtList[i] = Integer.parseInt(nums[i]);
}
//calculating final result of digital root
int result = 0;
for(Integer x : nxtList){
result += x;
}
System.out.println("Original number: " + str);
System.out.println("Digital root: " + result);
}
}Solution
Since a digital root is obtained by adding all the digits in a number, and while the resulting number is more than 9, repeating the process, an alternative and equally effective approach could simply be dividing by 9. In most cases, the digital root is simply the remainder of this operation.
Here's an example to see this in action. Take any number; for simplicity's sake, I choose a relatively low number: 625.
Thus the digital root is 4.
If you divided 625 by 9 you would get 69 with a remainder of 4. In other words, using modulo, and factoring in our edge cases (When n is 0, or 9 divides n with no remainder), we can write a digital root computing method as straight-forward as:
If the ternary operator is not to your liking, this is the equivalent using if statements:
Here's an example to see this in action. Take any number; for simplicity's sake, I choose a relatively low number: 625.
625 ->
6 + 2 + 5 = 13 ->
1 + 3 = 4Thus the digital root is 4.
If you divided 625 by 9 you would get 69 with a remainder of 4. In other words, using modulo, and factoring in our edge cases (When n is 0, or 9 divides n with no remainder), we can write a digital root computing method as straight-forward as:
public static int computeDigitalRoot(int n) {
return n == 0 ? 0 :
n % 9 == 0 ? 9 : n % 9;
}If the ternary operator is not to your liking, this is the equivalent using if statements:
public static int computeDigitalRoot(int n) {
if (n == 0) {
return 0;
}
if (n % 9 == 0) {
return 9;
}
return n % 9;
}Code Snippets
625 ->
6 + 2 + 5 = 13 ->
1 + 3 = 4public static int computeDigitalRoot(int n) {
return n == 0 ? 0 :
n % 9 == 0 ? 9 : n % 9;
}public static int computeDigitalRoot(int n) {
if (n == 0) {
return 0;
}
if (n % 9 == 0) {
return 9;
}
return n % 9;
}Context
StackExchange Code Review Q#84853, answer score: 18
Revisions (0)
No revisions yet.