|  | 
|  09-14-2004, 05:42 AM | #1 (permalink) | 
| Crazy Location: Arnold, MD | 
				
				[c++]Large int into single #'s
			 How would I convert a larger int. ex: 8790278573 into single numbers so that I can find the sum of the int.  I need 8790278573 to turn into 8 7 9 0 2 7 8 5 7 3, so that I can add them together and find the sum.  Any ideas on how I should do that? | 
|   | 
|  09-14-2004, 07:52 AM | #2 (permalink) | 
| Insane Location: Wales, UK, Europe, Earth, Milky Way, Universe | I've knocked together a little solution which works with int's but i'm afraid 8790278573 doesnt fit in an int (on my computer at least). You can see the method i used anyway: Code: #include<iostream>
using namespace std;
int main() {
	int i = 790278573;  // Number you want to add the digits of
	int icopy = i;
	int result = 0;
        
	while(icopy > 0) {
		result += icopy % 10;
		icopy /= 10;
	}
	cout << "Initial number: " << i      << "\n";
	cout << "Sum of digits : " << result << "\n";
}Hope this helps anyway 
				__________________ There are only two industries that refer to their customers as "users". - Edward Tufte | 
|   | 
|  09-14-2004, 10:03 AM | #4 (permalink) | |
| Insane Location: Wales, UK, Europe, Earth, Milky Way, Universe | Quote: 
 Anyway, my solution should work fine for that big number. I still cant think of a better way to do it... 
				__________________ There are only two industries that refer to their customers as "users". - Edward Tufte | |
|   | 
|  09-14-2004, 05:33 PM | #5 (permalink) | 
| Upright | I swear, you guys are making this way too hard. Code: int main()
{
        char *strBignum = "790278573\0";
        int i,sum=0;
        for(i=0; i<strlen(strBignum); i++) {
                sum += (int)(strBignum[i]-'0');
        }
        cout << "The sum is: " << sum <<endl;
} | 
|   | 
|  09-14-2004, 10:08 PM | #6 (permalink) | 
| Crazy | That's a good one, bacon. The hardest part is getting the ascii math right. You can even make it simpler (I like to make things as simple as possible): Code: int main()
{
        char *p = "8790278573";
        int s = 0;
        while (*p)
                s += *p++ - '0';
        cout << "sum " << s << endl;
}
				__________________ I want no escape. | 
|   | 
|  09-14-2004, 11:12 PM | #7 (permalink) | 
| Insane Location: Wales, UK, Europe, Earth, Milky Way, Universe | Nice one roboshark, very elegant. Have to say i was trying to stick to ints because j0hnb specified ints in his question but yours seems a much better way of doing it. 
				__________________ There are only two industries that refer to their customers as "users". - Edward Tufte | 
|   | 
|  09-15-2004, 02:04 AM | #8 (permalink) | |
| Crazy | Quote: 
 However, don't knock your solution completely. If the input can be represented as a string (such as reading the number from the command line), a solution such as bacon's or mine would be the best one. However, if the input is already in integer form (though the integer the OP specified won't fit into a 32 bit integer), then a solution along the lines you've presented will be the only choice. And yours looks pretty elegant to me! 
				__________________ I want no escape. | |
|   | 
|  09-15-2004, 09:04 AM | #10 (permalink) | 
| Insane Location: Wales, UK, Europe, Earth, Milky Way, Universe | robo: thanks for the kind words   You know, If we tweak this any more its gonna be totally unreadable! Heh, i never knew you could go to the next character in a *char by using ++. Ya learn something new every day  Anyway, i think j0hnb should have his answer now *pats us all on the back* I wonder where he went... 
				__________________ There are only two industries that refer to their customers as "users". - Edward Tufte | 
|   | 
| Tags | 
| int, large, single | 
| 
 |  |