繁体   English   中英

将整数分成数字,然后反向打印,然后输出数字总和C ++

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

我的问题是我必须接受用户提供的5位整数输入,然后将整数分成单独的数字。 然后,我需要以相反的顺序打印这些数字,并打印出这些数字的总和。 到目前为止,这是我将5位数整数分成其各个位数的代码。 请注意,我仅限于使用整数除法和取模运算符将整数分成数字位数。

#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;
}

例如,当用户输入5位数字(如77602)时,程序应将其输出为

7 7 6 0 2和数字的总和是22。

如何以相反的顺序以及各个数字的总和进行打印?

编辑:很少有拼写和语法错误。

反向字符串比整数要容易得多。 累加包含数字的字符串的各个数字比整数要容易得多。 尝试这个:

#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;
}

一个简单的解决方案,使用与代码相同的逻辑和工具。

    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";

这可能是您最容易理解的解决方案:

 #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;
}

我认为,您需要执行以下操作:

int number;

... some IO operations ...

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

之后,您需要做的是通过矢量digits 2-3次循环

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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