954,505 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Sum of digits

Hi all, I am new to C programming, can anyone help me out with a solution to find sum of digits of a 5-digit number without using control statements, like if, for... thank you

sakthi_2001
Newbie Poster
1 post since Sep 2007
Reputation Points: 10
Solved Threads: 0
 

Sorry. I thought this was in C++ ...

make an array, loop through, and sum:

int total = 0;
int array[ARRAY_SIZE];
/* Fill array with info */

for [0 -> ARRAY_SIZE-1] 
  total = total + array[CURRENT_POSITION]

print "Sum: " total


Obviously that's psuedo code.

twomers
Posting Virtuoso
1,877 posts since May 2007
Reputation Points: 453
Solved Threads: 57
 
[...] to find sum of digits of a 5-digit number without using control statements, like if, for... thank you
make an array, loop through, and sum:


Read the question again?

Aia
Nearly a Posting Maven
2,392 posts since Dec 2006
Reputation Points: 2,224
Solved Threads: 218
 

Maybe you could use the modulus operator and recursion?

iamthwee
Posting Expert
5,950 posts since Aug 2005
Reputation Points: 1,543
Solved Threads: 439
 

Oh sorry. I misread. Please forgive :) For my sins -

#include <stdio.h>

int sum_digi( const int &num ) {
  if ( !num ) 
    return num;
  else
    return (num%10)+sum_digi( num/10 );
}

int main( void ) {
  int sum = sum_digi( 12345 );

  printf( "Sum: %d\n\n", sum );

  return 0;
}



Just simple recursion. What it does is it starts at 5 and works to 1. It gets the last digit (through the %10 operation), and then gets the next value through recursively calling the same function but dividing by ten to get the next digit (ie from 5 to 4 in this case).

It'll also work for bigger numbers.

twomers
Posting Virtuoso
1,877 posts since May 2007
Reputation Points: 453
Solved Threads: 57
 

Perhaps unroll the loop?

int number = 56789, sum = 0;
   sum += number % 10; number /= 10;
   sum += number % 10; number /= 10;
   sum += number % 10; number /= 10;
   sum += number % 10; number /= 10;
   sum += number % 10; number /= 10;
Dave Sinkula
long time no c
Team Colleague
5,058 posts since Apr 2004
Reputation Points: 2,780
Solved Threads: 314
 
Oh sorry. I misread. Please forgive :) For my sins -


...He that is without sin among you, let him first cast a stone... John 8:7
However you are still using if/else control statements.

if ( !num ) 
    return num;
  else
    return (num%10)+sum_digi( num/10 );
Aia
Nearly a Posting Maven
2,392 posts since Dec 2006
Reputation Points: 2,224
Solved Threads: 218
 

Oh sorry. I misread. Please forgive :) For my sins -

#include <stdio.h>

int sum_digi( const int &num ) {
  if ( !num ) 
    return num;
  else
    return (num%10)+sum_digi( num/10 );
}

int main( void ) {
  int sum = sum_digi( 12345 );

  printf( "Sum: %d\n\n", sum );

  return 0;
}

Just simple recursion. What it does is it starts at 5 and works to 1. It gets the last digit (through the %10 operation), and then gets the next value through recursively calling the same function but dividing by ten to get the next digit (ie from 5 to 4 in this case).

It'll also work for bigger numbers.

Read it again, you used an if statement as Aia mentioned, in any case why are you doing someone else's homework. Leave them to their own devices:

iamthwee
Posting Expert
5,950 posts since Aug 2005
Reputation Points: 1,543
Solved Threads: 439
 

>> Leave them to their own devices
I know. I normally don't but I misread the first post and apparently messed up the second. Fat load of use I am, eh?

I should start reading the posts more closely. Dave's method is probably what they want. Why don't you give out to Dave? (Kiddin').

twomers
Posting Virtuoso
1,877 posts since May 2007
Reputation Points: 453
Solved Threads: 57
 

Yes in future, know the difference between a helpful prod in the right direction and a complete solution, albeit incorrect. Bah ha ha!

iamthwee
Posting Expert
5,950 posts since Aug 2005
Reputation Points: 1,543
Solved Threads: 439
 

Well technically then because for him it was incorrect it was a helpful prod in the right direction. All he had to do was 'flatten' it, right? So if two grey cells can rub off one another to create a fire ... you'd expect I could read propah.

twomers
Posting Virtuoso
1,877 posts since May 2007
Reputation Points: 453
Solved Threads: 57
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You