Open In App

Digital Root (repeated digital sum) of the given large integer

Last Updated : 13 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed and the process is repeated. This is continued as long as necessary to obtain a single digit.
Given a number, the task is to find its digital root. The input number may be large and it may not be possible to store even if we use long long int.
Asked in ACM-ICPC
Examples :

Input : num = “1234”
Output : 1
Explanation : The sum of 1+2+3+4 = 10, digSum(x) == 10,Hence ans will be 1+0 = 1
Input : num = “5674”
Output :

We have discussed a solution for numbers that can fit in long long it in the below post. 
Finding the sum of digits of a number until the sum becomes a single digit
In this post, similar approaches are discussed for large numbers.

Method 1
Find the Digital root of 65785412 
Steps:  

  1. Find out all the digits of a number
  2. Add all the number one by one
  3. If the final sum is double-digit, add again to make it single digit
  4. The result obtained in a single digit is the digital root of a number

Example: 
Input: 65785412 
Find Digital root: (6 + 5 + 7 + 8 + 5 + 4 + 1 + 2) = 38 => 11 => (1 + 1) = 2 
Output:
 

Method 2
The idea is based on the fact that for a non-zero number num, the digital root is 9 if the number is divisible by 9, else the digital root is (sum of digits of num) % 9. (Please see http://www.sjsu.edu/faculty/watkins/Digitsum0.htm for details)
Find the digital root of 65785412 
Steps: 

  1. Sum of digits = 6 + 5 + 7 + 8 + 5 + 4 + 1 + 2 = 38
  2. Since 38 is not a multiple of 9, the digital root is 38 % 9 = 2.

C++




// C++ program to find  digital root of a number
#include<bits/stdc++.h>
using namespace std;
 
// Returns digital root of num
int digitalRoot(string num)
{
    // If num is 0.
    if (num.compare("0") == 0)
        return 0;
 
    // Count sum of digits under mod 9
    int ans = 0;
    for (int i=0; i<num.length(); i++)
        ans = (ans + num[i]-'0') % 9;
 
    // If digit sum is multiple of 9, answer
    // 9, else remainder with 9.
    return (ans == 0)? 9 : ans % 9;
}
 
// Driver code
int main()
{
    string num = "65785412";
 
    // Calling digitalRoot function
    cout<< digitalRoot(num) <<endl;
 
    return 0;
}
 
// Note: Special case when num = "00..."
// program will not give correct output.


Java




// Java code for digital root
import java.util.*;
  
public class GfG {
      
    static int digroot(int n)
    {
        int root = 0;
  
        // Loop to do sum while
        // sum is not less than
        // or equal to 9
        while (n > 0 || root > 9)
        {
             if (n == 0) {
                n = root;
                root = 0;
            }
             
            root += n % 10;
            n /= 10;
        }
        return root;
    }
      
    // Driver code
    public static void main(String argc[])
    {
        int n = 65785412;
        System.out.println(digroot(n));
    }
}
 
// This code is contributed by Gitanjali.
// This code will run for 0000 testcase also.


Python3




# Python3 program to find digital root
# of a number
import math
 
# Returns digital root of num
def digitalRoot(num):
     
    # If num is 0.
    if (num == "0"):
        return 0
 
    # Count sum of digits under mod 9
    ans = 0
    for i in range (0, len(num)):
        ans = (ans + int(num[i])) % 9
         
 
    # If digit sum is multiple of 9, answer
    # 9, else remainder with 9.
    if(ans == 0):
        return 9
    else:
        return ans % 9
 
# Driver method
num = "65785412"
 
# Calling digitalRoot function
print (digitalRoot(num))
 
# This code is contributed by Gitanjali.


C#




// C# code for digital root
using System;
 
class GfG {
     
    static int digroot(int n)
    {
        int root = 0;
 
        // Loop to do sum while
        // sum is not less than
        // or equal to 9
        while (n > 0 || root > 9)
        {
            if (n == 0) {
                n = root;
                root = 0;
            }
             
            root += n % 10;
            n /= 10;
        }
        return root;
    }
     
    // Driver code
    public static void Main()
    {
        int n = 65785412;
        Console.Write(digroot(n));
    }
}
 
// This code is contributed by Smitha
// This code will run for 0000 testcase also.


PHP




<?php
// PHP program to find
// digital root of a number
 
// Returns digital root of num
function digroot($n)
{
    $root = 0;
 
    // Loop to do sum while
    // sum is not less than
    // or equal to 9
    while ($n > 0 || $root > 9)
    {
        if ($n == 0)
        {
            $n = $root;
            $root = 0;
        }
         
        $root += $n % 10;
        $n /= 10;
    }
    return $root;
}
 
// Driver code
$num = 65785412;
 
// Calling digitalRoot function
echo digroot($num);
 
// This code is contributed by Sam007
?>


Javascript




<script>
    // Javascript code for digital root
     
    function digroot(n)
    {
        let root = 0;
   
        // Loop to do sum while
        // sum is not less than
        // or equal to 9
        while (n > 0 || root > 9)
        {
            if (n == 0) {
                n = root;
                root = 0;
            }
               
            root += n % 10;
            n = parseInt(n / 10, 10);
        }
        return root;
    }
     
    let n = 65785412;
      document.write(digroot(n));
     
</script>


Output

2

Time Complexity: O(n), where n is the size of the given string num
Auxiliary Space: O(1)

 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads