471,874 Members | 1,827 Online

How to do sum of the digits?

How do you calculate the sum of the Integers is between 0 to 1000?
Examples integer is 945: the sum of all digits is 18.
This is my assignment but I don't know where to start and I need your help...

I must use the C++ language do it... hope u all can help me...

Thanks all
Jul 12 '06 #1
10 50818
Here's a hint:

"modulo"
in c++ the % operator
Jul 12 '06 #2
Here's a hint:

"modulo"
in c++ the % operator
sorry i duno wat u meaning.. if can do the sample teach me... i reali duno how 2 do the programming.. i jus learn from tis years... thanks for your post
Jul 12 '06 #3
Banfa
9,065 Expert Mod 8TB
Modulo arithmatic is arithmatic that wraps at a given value,

for instance in modulo 4

0 + 1 = 1
1 + 1 = 2
2 + 1 = 3
3 + 1 = 0

18 modulo 4 is 2. This is the remainder when 18 is divided by 4 using only whole numbers

18 / 4 = 4 remainder 2

The C/C++ % operator encompases this as it provides the integer remainder when 1 integer is divided by another

18 % 4 = 2;

DaLeach is (correctly in my opinion) suggesting that you can use the % operator (and interger divide /) to perform your calculation.

In integer arithmatic

18 % 10 = 8;
18 / 10 = 1;

We are not going to write a program for you as you will not learn anything but if you have an attempt at writing a program we will help you with any errors in it.

Write something, make sure it compiles without warnings or ask if there are errors or warnings you don't understand. if it doesn't work post your code and we'll help.
Jul 12 '06 #4
Hi,
Here is the program you wanted but it will work only for unsigned int values that two bytes data bytes. Its an 3 lines program & you can easily understand.
Expand|Select|Wrap|Line Numbers
1. #include <stdio.h>
2. #include <stdlib.h>
3.
4. void main(void)
5. {
6.     unsigned int Val = 65234, i=0, Res=0;
7.
8.     for(i=1;i<1000000;i=(i*10))
9.         Res += (Val%i*10)/i;
10.     printf("%d\n\n",Res);
11. }
Jul 12 '06 #5
this is a program to a input a natural number and output the sum of its digits but doesn't work for numbers greater than 10.Could someone pls help me.

Expand|Select|Wrap|Line Numbers
1. #include<iostream.h>
2. #include<conio.h>
3. void main()
4. {
5.   clrscr();
6.   int x,a,r,sum=0,sum2=0;
7.   cout<<"Enter any natural number: ";
8.   cin>>x;
9.   a=x;
10.   while(x!=0)
11.   {
12.     r=x/10;
13.     if(r==0) sum2=sum2+x;
14.     else sum=sum+r;
15.     x=x/10;
16.
17.   }
18.   cout<<"the sum of digits of "<<a<<"= "<<sum+sum2;
19.   getch();
20. }
Jul 30 '06 #6
Banfa
9,065 Expert Mod 8TB
Replace
Expand|Select|Wrap|Line Numbers
1.  r=x/10;
2. if(r==0) sum2=sum2+x;
3. else sum=sum+r;
4.
which I can not see what you expected to do, with
Expand|Select|Wrap|Line Numbers
1.  r=x%10;
2.  sum=sum+r;
3.
Remove variable sum2
Jul 30 '06 #7
Hi

I think the code will be like this :

If the Input is an Integer then this code will be works fine.
Expand|Select|Wrap|Line Numbers
1. int sun_dig(int num)
2. {
3.    int ctr,rem,sum=0;
4.      while(num!=0)
5.          {
6.             rem=num%10;
7.             sum=sum+rem;
8.             num=num/10;
9.          }
10.       return sum;
11. }
Jul 31 '06 #8
the integer is between 0 to 1000. how 2 do sum the digits? examples integer is 945. the sum of all digits is 18. tis is my assigment but i duno how 2 do... i need u all help... my letchurer say must use the C++ language do it... hope u all can help me... tis friday i need pass up. thanks all

Hi,
Now that u have got so many answers, so there is no point in giving any hint. just try this code without using modulus.
Expand|Select|Wrap|Line Numbers
1. unsigned int Val = 501;
2.
3. unsigned char array[15];
4.
5. itoa(Val, array, 10);
6.
7. Val = 0;
8.
9. for(int i=0; i< (strlen(array)); i++)
10. {
11.      Val += (array[i]-48);
12. }
13.
14. printf("%d\n\n", Val);
Jul 31 '06 #9
Hey i think you can use this following logic.

As you want to add 0-to-1000 where each bit addintion also there.

Expand|Select|Wrap|Line Numbers
1. total_sum=0;
2. for (input=0;input<=1000;input++)  {
3.         sum=0;  //Every time get reset.
4.
5.         for (i=0;i<4;i++)  {
6.                    sum=sum+ (input >> (i*4))%(10) ;
7.                   }
8.          total_sum=total_sum+sum;
9.     }

Note: total_sum= Sum of all 0-to-1000 with each bit addition.
sum=sum of each number with bit addition [ex.945 will reperesent 18]
>>( 4*i) = will do the bit shift and with modulo it will give the that integer
value.
Ex. for 945 the for loop will executed 3 times
First i=0, No shift so remainder =5
Second i=1, Shift by 4 bit so the Number is now 0094,Remainder gives 4
Third i=2, (094) Shifted by 4 bit so the Number is now 0009,Remainder
gives 9.

Just run the code and see whether its working. :) :D :p
Aug 1 '06 #10
Banfa
9,065 Expert Mod 8TB
Note: total_sum= Sum of all 0-to-1000 with each bit addition.
sum=sum of each number with bit addition [ex.945 will reperesent 18]
>>( 4*i) = will do the bit shift and with modulo it will give the that integer
value.
Ex. for 945 the for loop will executed 3 times
First i=0, No shift so remainder =5
Second i=1, Shift by 4 bit so the Number is now 0094,Remainder gives 4
Third i=2, (094) Shifted by 4 bit so the Number is now 0009,Remainder
gives 9.
Unfortunately I do not need to run the code to know it is not working, you have confused decimal and hexidecimal digits

For any hexidecimal number H = 0xWXYZ then H >> 4 = 0x0WXY for example

0x6b37 >> 4 = 0x06b3

and 0x06b3 % 0x10 = 0x0003 but not 0x10 == 16

But the problem and your code are not dealing with hexidecimal digits it is and should be dealing with decimal digits and >> 4 does not shift by a complete digit

i = 0

945 % 10 = 5

i = 1

945 = 0x031B

>> i*4 = 0x0031 = 59

% 10 = 9

i = 2

945 = 0x031B

>> i*4 = 0x0003 = 3

% 10 = 3

Therefore sum = 5 + 9 + 3 = 17 but the sum of the digits of 945 = 18

sum=sum+ (input >> (i*4))%(10) ;

needs to be

sum=sum+ (input / (i*10))%(10) ;

to work as you intended
Aug 2 '06 #11