Digital Root

/** Author : Suraj Kumar Modi
 * https://github.com/skmodi649
 */
/** You are given a number n. You need to find the digital root of n.
 * DigitalRoot of a number is the recursive sum of its digits until we get a single digit number.
 *
 * Test Case 1:
 * Input:
 * n = 1
 * Output:  1
 * Explanation: Digital root of 1 is 1
 *
 * Test Case 2:
 * Input:
 * n = 99999
 * Output: 9
 * Explanation: Sum of digits of 99999 is 45
 * which is not a single digit number, hence
 * sum of digit of 45 is 9 which is a single
 * digit number.
 */
/** Algorithm :
 * Step 1 : Define a method digitalRoot(int n)
 * Step 2 : Define another method single(int n)
 * Step 3 : digitalRoot(int n) method takes output of single(int n) as input
 * if(single(int n) <= 9)
 * return single(n)
 * else
 * return digitalRoot(single(n))
 * Step 4 : single(int n) calculates the sum of digits of number n recursively
 * if(n<=9)
 * return n;
 * else
 * return (n%10) + (n/10)
 * Step 5 : In main method simply take n as input and then call digitalRoot(int n) function and print the result
 */
package com.thealgorithms.maths;

import java.util.*;

class DigitalRoot {

    public static int digitalRoot(int n) {
        if (single(n) <= 9) // If n is already single digit than simply call single method and return the value
        {
            return single(n);
        } else {
            return digitalRoot(single(n));
        }
    }

    // This function is used for finding the sum of digits of number
    public static int single(int n) {
        if (n <= 9) // if n becomes less than 10 than return n
        {
            return n;
        } else {
            return (n % 10) + single(n / 10);                     // n % 10 for extracting digits one by one
        }
    }                                                             // n / 10 is the number obtainded after removing the digit one by one  
    // Sum of digits is stored in the Stack memory and then finally returned

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the number : ");
        int n = sc.nextInt();                                     // Taking a number as input from the user
        System.out.println("Digital Root : " + digitalRoot(n));     // Printing the value returned by digitalRoot() method
    }
}

/**
 * Time Complexity : O((Number of Digits)^2) Auxiliary Space Complexity :
 * O(Number of Digits) Constraints : 1 <= n <= 10^7
 */
Algerlogo

Β© Alger 2022

About us

We are a group of programmers helping each other build new things, whether it be writing complex encryption programs, or simple ciphers. Our goal is to work together to document and model beautiful, helpful and interesting algorithms using code. We are an open-source community - anyone can contribute. We check each other's work, communicate and collaborate to solve problems. We strive to be welcoming, respectful, yet make sure that our code follows the latest programming guidelines.