How to get even & odd numbers correctly from a positive integer in c++?


How to get even & odd numbers correctly from a positive integer in c++?



I am new to C++... I am having trouble to get even & odd numbers from a positive integer.. But for some reason it is not displaying it correctly. So, in my if-else statement I am using the mod operator and using even = even * 10 + remainder; for even numbers and for the odd number I am trying to do is: odd = odd * 10 + remainder;.. I am getting an error with


mod


even = even * 10 + remainder;


odd = odd * 10 + remainder;



Invalid operands to binary expression.



So, can anyone help me solve the problem by getting the even & odd numbers from a positive integer. Thanks.



Here is my code:


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

}





There is no overload for the + operator for string and integers. See here en.cppreference.com/w/cpp/string/basic_string/operator%2B
– smac89
2 days ago


+





Upon further inspection of your code, you are attempting to do even * 10 + remainder; when even is std::string....what do you expect that expression to give you?
– smac89
2 days ago


even * 10 + remainder;


even


std::string





I see that it is a string.... how can I accomplish this, prior of being new to c++, I need some help - so I can grasp some snippets from you guys .
– Harut Simonyan
2 days ago





Convert the string to a number before using it like that...See en.cppreference.com/w/cpp/string/basic_string/stol. Then after you are done, convert it back to a string with en.cppreference.com/w/cpp/string/basic_string/to_string
– smac89
2 days ago






is it the place when I am calling even = "" and odd="" ?
– Harut Simonyan
2 days ago


even = ""


odd=""




1 Answer
1



Convert the number to string before appending it to the string:


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



If you are uncomfortable with using std::to_string, then you can have even and odd as integers and simply do this:


std::to_string


even


odd


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





in my declaration string even = "", odd = ""; should I change it to int ?
– Harut Simonyan
2 days ago


string even = "", odd = "";


int





@HarutSimonyan, yes. Change it to int even = 0, odd = 0;
– smac89
2 days ago



int even = 0, odd = 0;





and set it equal to 0 , right?
– Harut Simonyan
2 days ago





@HarutSimonyan, yes, I just edited my comment above
– smac89
2 days ago





@HarutSimonyan Everywhere you were doing even = some_string, change it to even = 0. The same goes for odd
– smac89
2 days ago



even = some_string


even = 0


odd






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Comments

Popular posts from this blog

paramiko-expect timeout is happening after executing the command

Opening a url is failing in Swift

Export result set on Dbeaver to CSV