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