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

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.

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 : 4
```

We have discussed a solution for numbers that can fit in long long it in below post.
Finding sum of digits of a number until sum becomes single digit

In this post, similar approaches are discussed for large numbers.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Method 1

Find 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 single digit is the Digital root of number

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

Method 2

The idea is based on the fact that for a non-zero number num, digital root is 9 if number is divisible by 9, else digital root is 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 multiple of 9, digital root is 38 % 9 = 2.

## C++

 `// C++ program to find  digital root of a number ` `#include ` `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

## 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

 ` 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 ` `?> `

Output :

```2
```

This article is contributed by Shiv Pratap Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

4

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.