首页 > 解决方案 > 如何从 C++ 中的正整数中正确获取偶数和奇数?

问题描述

我是 C++ 的新手……我无法从正整数中获取偶数和奇数……但由于某种原因,它无法正确显示。因此,在我的 if-else 语句中,我使用mod运算符并使用even = even * 10 + remainder;偶数和奇数我试图做的是:odd = odd * 10 + remainder;..我遇到错误

二进制表达式的操作数无效。

那么,任何人都可以通过从正整数中获取偶数和奇数来帮助我解决问题。谢谢。

这是我的代码:

#include <iostream>
#include <fstream> // for file stream. 



using namespace std;

int main() {

    // Variables 
    int x, reversedNumber, remainder;

    // Creating String variables and setting them to empty string. 
    string even = "", odd = "";

    // Creating a file. 
    ofstream out;
    out.open("outDataFile.txt");

    // creating a character variable 
    // for the user input if they want to use the program again. 
    char ch;

    do {
        // Even number. 
        even = "";

        // Odd number.
        odd = "";

        // Reversed number
        reversedNumber = 0;

        // Prompt the user to enter a positive integer. 
        cout << "\nEnter a positive integer and press <Enter> ";


     // Validate user input. 
//        if (cin >> x && x < 0) {
//
//        } else {
//             cout << "Invalid entry, Try again." << endl;
//            cin.clear();
//            while (cin.get() != '\n');  
//        }

        // Display Results to the screen
        cout << "the original number is " << x << "\n";

        // Display results in the text file. 
        out << "the original number is " << x << "\n";

        // Display number reversed. 
        cout << "the number reversed ";

        // Display number reversed in text file. 
        out << "the number reversed ";

        //Reversing the integer. 
        while (x != 0) {
            remainder = x % 10;

            reversedNumber = reversedNumber * 10 + remainder;

            // Display on screen 
            cout << remainder << " ";

            // Display in text file. 
            out << remainder << " ";

            x /= 10;

        }

        // Display the results on screen and in the text file. 
        cout << "\n";
        out << "\n";


        // Reading the reverse numbers result.
        while (reversedNumber != 0) {

            remainder = reversedNumber % 10;


            // Checking if the number is even or odd. 
            if (remainder % 2 == 0) {

              // even = even * 10 + remainder;


            } else  {


              //  odd = odd * 10 + remainder;



            }

            reversedNumber /= 10;

        }

        //Displaying the even numbers. 

        if (even != "") {

            cout << "the even digits are " << even << "\n";


            out << "the even digits are " << even << "\n";


        }          

        // If it is not even then display.. 
        else {

            cout << "There are no even digits \n";

            out << "There are no even digits \n";

        }

        //Display the odd results. 

        if (odd != "") {

            cout << "the odd digits are " << odd << "\n";

            out << "the odd digits are " << odd << "\n";

        }           
         // If its not odd then display. 
        else {

            cout << "There are no odd digits \n";

            out << "There are no odd digits \n";

        }

        // just a divider to divide the results inside text file.
        out << "----------------- \n";

        // Prompt the user if they want to use the program again.
        cout << "\nDo you like to continue/repeat? (Y/N):";

        // get the input from user. 
        cin >> ch;

        if ((ch == 'Y') || (ch == 'y')) {

        } else {
            cout << "\nGoodbye!" << endl;
        }

    } while (ch == 'y' || ch == 'Y');


    // close the text file. 

    out.close();

    return 0;

}

标签: c++

解决方案


在将数字附加到字符串之前将其转换为字符串:

while (reversedNumber != 0) {
    remainder = reversedNumber % 10;

    // Checking if the number is even or odd. 
    if (remainder % 2 == 0) {
      even += std::to_string(remainder);    
    } else  {
      odd += std::to_string(remainder);
    }

    reversedNumber /= 10;
}

如果您对使用感到不舒服std::to_string,那么您可以将evenandodd作为整数并简单地执行以下操作:

int even = 0;
int odd = 0;

...

while (reversedNumber != 0) {
    remainder = reversedNumber % 10;

    // Checking if the number is even or odd. 
    if (remainder % 2 == 0) {
      even *= 10 + remainder;    
    } else  {
      odd *= 10 + remainder;
    }

    reversedNumber /= 10;
}

推荐阅读