Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sum of digits till the sum is one-digit number

Tags:

java

do-while

I am a beginner java and trying to solve tricky problem

input=777
output should be 3
7+7+7=21 , 2+1=3;
From the above code if my input is 333 I am getting 9 as answer but when the sum is two digits(777=21) i am getting blank!

public static void main(String[] args) 
{

    int y=333;//if y is 777 i am getting blank
    int sum=0;
    String s;
    char []ch;
    do
    {
        s=String.valueOf(y);
        ch=s.toCharArray();

        if(ch.length>1) 
        {
            for(int i=0;i<ch.length;i++)
            {
            sum+=Character.getNumericValue(ch[i]);
            }
        }
        else
        {
        System.out.println(sum);
        }
        y=sum;      

    }while(ch.length>1);

}
like image 571
Akhil Maripally Avatar asked Aug 23 '15 08:08

Akhil Maripally


People also ask

How do you make a loop repeat until the sum is a single digit?

Prompt: Write a program that adds all the digits in an integer. If the resulting sum is more than one digit, keep repeating until the sum is one digit. For example, the number 2345 has the sum 2+3+4+5 = 14 which is not a single digit so repeat with 1+4 = 5 which is a single digit.

What is digit sum rule?

The digit sum - add the digits of the representation of a number in a given base. For example, considering 84001 in base 10 the digit sum would be 8 + 4 + 0 + 0 + 1 = 13. The digital root - repeatedly apply the digit sum operation to the representation of a number in a given base until the outcome is a single digit.

What does it mean if the sum of the digits of a number adds to 9?

More generally, when casting out nines by summing digits, any set of digits which add up to 9, or a multiple of 9, can be ignored. In the number 3264, for example, the digits 3 and 6 sum to 9. Ignoring these two digits, therefore, and summing the other two, we get 2 + 4 = 6.


2 Answers

your code maybe loop forever

the right solution is the following below

public static void main(String[] args) throws ParseException {
int y = 777;// if y is 777 i am getting blank
int sum = 0;
String s;
char[] ch;
do {
    sum = 0;
    s = String.valueOf(y);
    ch = s.toCharArray();
    if (ch.length > 1) {
        for (int i = 0; i < ch.length; i++) {
            sum += Character.getNumericValue(ch[i]);
        }
    } else {
        System.out.println(ch[0]);
        break;
    }
    y = sum;
} while (ch.length > 1);
}

Maybe the better choice is the following code

public static void main(String[] args) throws ParseException {
    int y = 333;// if y is 777 i am getting blank
    int sum = 0;
    while (y % 10 != 0) {
        sum += y %10;
        y = y / 10;
        if (0 == y && sum >= 10) {
            y = sum;
            sum = 0;
        }
    }
    System.out.println(sum);
}

hope that helped

like image 127
Javy Avatar answered Nov 30 '22 11:11

Javy


For a task like this, it is best practise to use recursion.

The workflow in pseudocode would look like this:

procedure sumTillOneDigit(n)
    split n into it's digits
    s := sum of all digits of n

    if s has more than one digit:
        sumTillOneDigit(s)
    else
        output s

I am intentionally writing this in pseudocode, since this should help you solving the task. I will not give you a Java implementation, as it looks like a homework to me.

For more information see:

  • https://en.wikipedia.org/wiki/Recursion_(computer_science)
  • http://introcs.cs.princeton.edu/java/23recursion/
like image 22
CharlyDelta Avatar answered Nov 30 '22 11:11

CharlyDelta