Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm palindrome là bình phương của palindrome trong C++


Trong hướng dẫn này, ta sẽ thảo luận chương trình để tìm số lượng palindrome là bình phương của một palindrome khác (super palindrome).

Cho hai giá trị L và R. Nhiệm vụ là tìm số lượng super palindrome trong khoảng [L, R]. Super palindrome là số mà cả nó và bình phương của nó đều là palindrome.

Ví dụ

#include <bits/stdc++.h>
using namespace std;

bool if_palin(int x) {
    int ans = 0, temp = x;
    while(temp > 0) {
        ans = 10 * ans + temp % 10;
        temp /= 10;
    }
    return ans == x;
}

int is_spalin(int L, int R) {
    const int LIMIT = 100000;
    int ans = 0;
    // Palindrome lẻ
    for(int i = 0; i < LIMIT; i++) {
        string s = to_string(i);
        string rs = s.substr(0, s.size() - 1);
        reverse(rs.begin(), rs.end());
        string p = s + rs;
        int p_sq = stoi(p) * stoi(p);
        if(p_sq > R) break;
        if(p_sq >= L && if_palin(p_sq)) ans++;
    }
    // Palindrome chẵn
    for(int i = 0; i < LIMIT; i++) {
        string s = to_string(i);
        string rs = s;
        reverse(rs.begin(), rs.end());
        string p = s + rs;
        int p_sq = stoi(p) * stoi(p);
        if(p_sq > R) break;
        if(p_sq >= L && if_palin(p_sq)) ans++;
    }
    return ans;
}

int main() {
    string L = "4", R = "1000";
    cout << is_spalin(stoi(L), stoi(R));
    return 0;
}

Kết quả

4