Java program to find the sum of digits of a number until a single digit is found

Java program to find the sum of digits of a number until a single digit is found:

In this Java programming tutorial, we will learn how to find the sum of all digits of a number, until a single digit is found.

For example, for the number 345, the sum of its digits is 3 + 4 + 5 i.e. 12. But, 12 is greater than 10. So, we have to find the sum of digits again, i.e. 1 + 2, which is 3 and this is a single-digit number. So, it will print 3 for 345.

This program will take one number as input from the user and it will print the single digit value.

Algorithm to follow:

We will follow the following algorithm:

  • Take the number as input from the user.
  • Find the sum of the digits of the number.
  • If it is not a one digit value, find its sum of digits again.
  • Keep doing it until you get asingle-digitt value.
  • Print that number.

Java program:

Let’s write down the complete Java program:

import java.util.Scanner;

public class Main {
    private static int findSumOfDigits(int no) {
        int sum = 0;

        while (no > 0) {
            sum += no % 10;
            no /= 10;
        }

        return sum;
    }

    public static void main(String[] args) {
        int no, sum;
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter the number: ");
        no = sc.nextInt();

        sum = no;

        while (sum > 9) {
            sum = findSumOfDigits(sum);
        }

        System.out.println("Sum for " + no + " is: " + sum);
    }
}

In this program,

  • no and sum are two integer variables to hold the user input number and the sum of digits.
  • sc is a Scanner object to read the user inputs.
  • It asks the user to enter a number. It reads the number by using the Scanner object and stores that in the no variable.
  • We are assigning the value of no to sum.
  • The while loop will run until the value of sum is more than 9.
    • Inside the loop, we are finding the sum of the digits of sum by using the findSumOfDigits method and assigning it to sum.
    • This loop will stop once we get a single-digit value of the sum.
  • findSumOfDigits method takes a number and returns the sum of the digits of that number.
    • It initializes a sum variable as 0 and by using a while loop, it finds the sum of the digits.
  • At the end of the program, we are printing the single-digit sum.

Method 2: O(1) solution:

There is another easy way to solve this problem. If a number is divisible by 9, then the single-digit sum we found by adding the digits of the number is always 9.

For example, 8802 is divisible by 9. So, if we add the digits, it will be 8 + 8 + 0 + 2 = 18, and if we add the digits of 18, it will be 9. Only for 0, it will be 0.

For all numbers, we can either represent it as 9 * n or 9 * n + d. For all 9 * n numbers, it will be 9 and for 9 * n + d, it will be d.

Let’s write down the program with this algorithm:

import java.util.Scanner;

public class Main {
    private static int findSumOfDigits(int no) {
        if (no == 0) {
            return 0;
        } else if (no % 9 == 0) {
            return 9;
        } else {
            return no % 9;
        }
    }

    public static void main(String[] args) {
        int no;
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter the number: ");
        no = sc.nextInt();

        System.out.println("Sum for " + no + " is: " + findSumOfDigits(no));
    }
}

So,

  • We changed the findSumOfDigits method.
  • It takes one number as the parameter
    • Returns 0 if the number is 0
    • Returns 9 if the number is divisible by 9.
    • Else, it returns no % 9, or the remainder if we divide no by 9

If you run this program, it will print output as like below:

Enter the number: 
8802
Sum for 8802 is: 9

We can also use ternary operators to write it in just one line:

import java.util.Scanner;

public class Main {
    private static int findSumOfDigits(int no) {
        return no == 0 ? 0 : (no % 9 == 0 ? 9 : no % 9);
    }

    public static void main(String[] args) {
        int no;
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter the number: ");
        no = sc.nextInt();

        System.out.println("Sum for " + no + " is: " + findSumOfDigits(no));
    }
}

It will print a similar result.

Java find sum digits until a single-digit is found

You might also like: