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