C ++ дисплей супер палиндромы - PullRequest
0 голосов
/ 19 октября 2019

Мне нужно отобразить палиндромы, и квадраты этих палиндромов также должны быть палиндромами (например, 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;
}

1 Ответ

0 голосов
/ 19 октября 2019

Я собираюсь пойти дальше и предположить, что ваш собственный код сбивает вас с толку, и добавление еще одного такого же слоя сделает код нечитабельным.
Чтобы исправить это, мы можем ввести функцию, которая проверяет, является ли число палиндромом. .

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

В последнем случае мы используем обратные итераторы begin и end длясоздайте ту же, но перевернутую строку.

Теперь ваш код выглядит намного чище и более читабельным.

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

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...