计算在输入第一个对称数之前输入的次数

时间:2016-01-20 21:36:28

标签: c++

我编写了以下代码,但仅在第一个数字是对称时才有效:

对称性就像这个数字: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;
}

3 个答案:

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

具有有意义名称的函数总是有用!