我编写了以下代码,但仅在第一个数字是对称时才有效:
对称性就像这个数字:4554(两端读数是相同的数字)
我的问题是为什么休息只适用于第一个号码?它发生在我运行时。
#include <iostream>
using namespace std;
int main()
{
int n=0, z=0, r=0, x=0, m;
for (;;) {
cout << "Enter number: ";
cin >> x;
m = x;
while(x!=0) {
r = x % 10;
z = z * 10 + r;
x = x / 10;
}
if(m==z)
break;
else
n++;
}
cout << n;
return 0;
}
答案 0 :(得分:2)
移动int z = 0,r = 0;在for循环中。
答案 1 :(得分:0)
为什么不使用此代码来确定数字是否对称?
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
int x;
for (;;) {
cout << "Enter number: ";
cin >> x;
m = x;
std::stringstream str;
str << x;
std::string number = str.str();
if ( number == std::string( number.rbegin(), number.rend() )
break;
else
n++;
}
cout << n;
return 0;
}
更简单,导致相同的结果,肯定更容易出错; - )
答案 2 :(得分:0)
如果你这样写的话会更容易推理:
#include <iostream>
bool isPalindrome(int x)
{
int y = x;
int z;
while (x) {
z = z * 10 + x % 10;
x /= 10;
}
return y == z;
}
int main()
{
int n = 0;
int x;
for (;;) {
std::cout << "Enter number: ";
std::cin >> x;
if (isPalindrome(x))
break;
else
++n;
}
std::out << "Number of non-palindromes: " << n << std::endl;
return 0;
}
具有有意义名称的函数总是有用!