C ++显示超级回文

问题描述 投票:-2回答:1

我需要显示回文,并且这些回文的正方形也必须是回文(例如,11是回文,其正方形121也是回文)。使用c ++,循环。这是我到目前为止的结果(仅输出回文):

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    int n, r, atv, temp;

    for(n = 0; n <= 100; ++n){
        temp = n;
        atv = 0;

        while(temp){
            r = temp % 10;
            temp = temp / 10;
            atv = atv * 10 + r;
        }

        if(n == atv){
            cout << n << '\n';
        }
    }

    return 0;
}
c++ loops
1个回答
0
投票

我将继续进行,并假设您自己的代码使您感到困惑,并在其中添加另一层会使代码难以阅读。为了解决这个问题,我们可以引入一个检查数字是否为回文的函数。

bool is_palindrome(const int num){
    int reversed_num = 0;
    int temp = num;

    while(temp){
        int last_num = temp % 10;
        temp /= 10;

        reversed_num = reversed_num * 10 + last_num;
    }

    return num == reversed_num;
}

我们还可以通过使用std::string使此功能更具可读性。

bool is_palindrome(const int num){
    string original = to_string(num);

    return original == string(rbegin(original), rend(original));
}

在后者中,我们使用反向beginend迭代器构造相同但反向的字符串。

现在,您的代码看起来更加清晰易读。

int main(){
    for(int num = 0; num <= 1000; ++num){
        if(is_palindrome(num) && is_palindrome(num * num)){
            cout << num << '\n';
        }
    }

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.