# Find the sum of the digits of a given number

I need to find the sum of the digits of the given number and repeat the process until the value lies between 1 to 9.

e.g if the input is 72457 then,

7+2+4+5+7 = 25

2+5 = 7

so , the function should return 7.

Also, if the input is a negative number like -72457 the function should return -7.

Here's what i tried,

int digitSum(int input1){

int flag=0;

if(input1<0)
flag=1;

int rem,sum=0;
int x=abs(input1);

while(x>0){
rem=x%10;
sum+=rem;
x=x/10;

}

int value = sum%9;

if(value==0){

if(flag==1)
return -9;

else
return 9;
}

else{

if(flag==1)
return -value;

else
return value;

}

}

• What if the input is 0? Mar 25 '19 at 16:01
• You can shuffle the logic around a bit to simplify this by first having an int which represents the sign of the input number by dividing input / abs(input), which will give you either -1 or 1. Then, during your summation loop, do a comparison of != 0. so that you don't have to worry about the sign. And finish off by returning sum * sign Mar 25 '19 at 16:11
• n % 9 gets you most of the way there; you only need to adjust zero results to ±9, and you're done. Mar 25 '19 at 16:23

A simplified pure numerical function may be:

int digitSum(int input) {
int n,m,s = input<0 ? -1:1;
for(n=input*s; n>9; ) {
for(m=n, n=0; m>0; m/=10)
n+=m%10;
}
return n*s;
}

• Thanks, @holger, I missed the recursivness of the problem.
– Bo R
Mar 26 '19 at 14:56