Rhonda Win
Rhonda Win

Reputation: 11

Input an integer, get spaced output in C++?

I'm working on homework and I'm stumped on this problem: Write a program that prompts the user to input an integer and then outputs both the individual digits of the number and the sum of the digits. For example, it should output the individual digits of 3456 as 3 4 5 6, [...], output 4000 as 4 0 0 0, and the individual digits of -2345 as 2 3 4 5.

Here's my code so far:

int main()
{
    string a;       //declares string

    cout << "Type an integer: ";        //prompts user to input an integer
    cin >> a;               //stores into string a
    cout << "There are " << a.size() << " digits in " << a << endl; //retrieves length of string a

    cout << a.at(0);

    cout << endl;

    system ("pause");       //pauses the system so user can read the screen
    return 0;       //returns 0 if program works properly

}

Can anyone enlighten me on what I'm doing wrong/what my next step is?

Upvotes: 1

Views: 7893

Answers (5)

Jared Sealey
Jared Sealey

Reputation: 324

So the steps are..

  1. store the input
  2. display them all one by one separated by spaces
  3. figure out the sum and display that

.

#include<string>
#include<iostream>
using namespace std;
int main()
{
    string a;

    cout << "Type an integer: ";

    // 1. store the input
    cin >> a;

    // 2. display them all one by one separated by spaces
    for(int i=0;i<a.size();++i)
      cout << a[i] << ' ';
    cout << endl;

    // 3. figure out the sum and display that
    int total = 0;
    for(int i=0;i<a.size();++i)
       total += a[i] - '0';
    cout << total << endl;

    system("pause");
    return 0; 
}

The tricky part is getting the correct sum in step 3.

total += a[i] - '0';

Lets say for example that a[i] is the character '4'. The ASCII value of character '4' is the integer equivalent of 52, and the ASCII integer equivalent of '0' is 48. Therefore if we take '4' - '0', we will get the difference of 4, which is the integer representation we are looking for in this case.

Here is a simple ASCII chart with character values.

Hope this helps!

Upvotes: 1

Alex Z
Alex Z

Reputation: 2590

int main()
{
    int runningTotal = 0;
    std::string inputString;
    std::cin >> inputString;
    for ( std::string::iterator _it = inputString.begin(); 
                                _it != inputString.end(); ++_it )
    {
        // *_it now represents an individual char of the input string
        char a = *_it; char* b = &a;
        if ( a != '-' )
        {
             runningTotal += atoi( std::string( b ).c_str() );
             std::cout << *_it << " ";
        }
    }
    std::cout << std::endl << "Total of all digits: " << runningTotal << std::endl;
    std::cin.get();
    std::system( "pause" );
    return 0;
}

I threw this together quickly for you. Hope it's of help.

Upvotes: 0

amdn
amdn

Reputation: 11582

Rhonda, I can understand your frustration, computers are like that... they do what you say, not what you mean :-) Hang in there.

You say your program should output each of the digits in the number, yet your program asks the user to enter each of the digits. That is confusing.

Also, you first assign a value to "num" here

cin >> num;

then you overwrite "num" in this line

cin >> num >> a;

I'm not sure what you mean to do here, but what you're telling the computer to do is to read an integer from the input and assign it to "num" and assign the rest to the line to string "a"... if the rest of the line just has a space, the space will be discarded... it acts as a separator. That is probably confusing you as well.

Upvotes: 0

Bhargav
Bhargav

Reputation: 10199

You could try this piece of code:

   int num = 0;
   cin>>num;

   //Make sure array is large enough to hold all digits
   //For an int 10 digits it the max
   int digits[10] = {0};  

   //This variable tracks the count of actual number of
   //digits extracted from user input
   int digitCount = 0;

   while (num > 0) 
   {
      digits[digitCount] = num % 10;   //Extract digit at units place
      num = num / 10;                 //Advance through the number
      digitCount++;
   }

   for(int count= digitCount-1 ; count >= 0; count-- )
   {
      cout<<digits[count]<<" ";
   }

Note that the printing loop runs backwards (i.e from digitCount to zero) because the digits are extracted and stored starting from the units place. For a number a like 12345 the digits array will contain 5 4 3 2 1.

Upvotes: 0

Linuxios
Linuxios

Reputation: 35793

You probably want to input the number as a string. This will allow you to do digit by digit processing. Then the user will enter the number once instead of many times as digits.

Upvotes: 0

Related Questions