简体   繁体   中英

Separating integer into digits, printing in reverse, and printing the sum of the digits C++

My problem is that I'm having to take a 5-digit integer input given by the user, and separate the integer into its individual digits. I then need to print those digits in reverse order and also print out the sum of those digits. Here is what I have coded so far to separate the 5-digit integer into its individual digits. Please note that I am limited to using integer division and modulo operators for separating the integer into its digits.

#include <iostream>

using namespace std;
int main() {
int number;

    cout << "Enter a five-digit number: ";
    cin >> number;

    cout << number / 10000 << " ";
    number = number % 10000;
    cout << number / 1000 << " ";
    number = number % 1000;
    cout << number / 100 << " ";
    number = number % 100;
    cout << number / 10 << " ";
    number = number % 10;
    cout << number << endl;

    return 0;
}

For example, when the user inputs a 5-digit number like 77602, the program should output it as

7 7 6 0 2 and the sum of the digits is 22.

How do I go about printing this in reverse order as well as the sum of the individual digits?

Edit: Few spelling and grammatical errors.

It's a lot easier to reverse a string than an integer. It's also a lot easier to accumulate individual digits of a string containing a number than an integer. Try this:

#include <iostream>
#include <string>
#include <algorithm>
int main(int argc, char *argv[])
{
    std::string number;
    int accum = 0;
    std::cout << "Enter a five digit number: ";
    std::cin >> number;

    if (number.length() != 5)
    {

        std::cout << std::endl << "I asked for five digits!" << std::endl;
        return 0;
    }

    for (int i = 0; i < 5; i++)
    {
        if (number.at(i) < '0' || number.at(i) > '9')
        {
            std::cout << std::endl << "Non-integer string entered" << std::endl;
            return 0;
        }

        accum += (number.at(i) - '0');

    }

    std::reverse(number.begin(), number.end());
    std::cout << "Reversed: " << number << std::endl << "Sum of digits: " << accum << std::endl;



    return 0;
}

A simple solution using the same logic and tools of your code..

    int sum = 0;
    for(int i = 0; i < 5; ++i)
    {
        int digit = number % 10;
        sum += digit;
        cout << digit << " ";
        number /= 10;
    }

    cout << "\nSum of digits: " << sum << "\n";

This is probably easiest solution for you to understand:

 #include <iostream>

using namespace std;
int main()
{
int number;
int number2;
int numberReverse;
int sum = 0;

cout << "Enter a five-digit number: ";
cin >> number;

numberReverse = number;

cout << number / 10000 << " ";
sum = sum + number/10000;
number = number % 10000;
cout << number / 1000 << " ";
sum = sum + number/1000;
number = number % 1000;
cout << number / 100 << " ";
sum = sum + number/100;
number = number % 100;
cout << number / 10 << " ";
sum = sum+number/10;
number = number % 10;
cout << number << endl;
sum = sum+number;

cout << "Reverse: " << endl;

number2 = numberReverse%10;
cout << number2 << " ";
number2 = (numberReverse/10)%10;
cout << number2 << " ";
number2 = (numberReverse/100)%10;
cout << number2 << " ";
number2 = (numberReverse/1000)%10;
cout << number2  << " ";
number2 = (numberReverse/10000)%10;
cout << number2 << endl;

cout << "Sum is " << sum;

return 0;
}

I think, you need to do something like this:

int number;

... some IO operations ...

std::vector<int> digits;
do {
    digits.push_back(number % 10);
    number /= 10;
} while (number);

After this all you need to do is 2-3 loops through vector digits

for (std::size_t k = digits.size() - 1; k >= 0; --k)
   std::cout << digits[k] << " ";
std::cout << std::endl;
for (std::size_t k = 0; k < digits.size(); ++k)
    std::cout << digits[k] << " ";
std::cout << std::endl;
int sum = 0;
for (std::size_t k = 0; k < digits.size(); ++k)
    sum += digits[k];
std::cout << sum;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM