大意略。
/* ID:g0feng1 LANG:C++ TASK:palsquare */ #include <iostream> #include <fstream> #include <cstdlib> #include <cstdio> #include <string> #include <cstring> #include <cmath> #include <map> #include <algorithm> #include <stack> using namespace std; ofstream fout("palsquare.out"); ifstream fin("palsquare.in"); int Base; const int maxn = 110000; int a[maxn], b[maxn]; void read_case() { fin>>Base; } int check(int *a, int n) { for(int i = 0; i < n/2; i++) if(a[i] != a[n-1-i]) return 0; return 1; } void print(int n, int base) { stack<char> S; int s = n; while(s) { int t = s % base; s /= base; if(t <= 9) { char c = t+'0'; S.push(c); } else if(t >= 10) { char c = t-10+'A'; S.push(c); } } while(!S.empty()) { char c = S.top(); fout<<c; S.pop(); } fout<<" "; s = n*n; while(s) { int t = s % base; s /= base; if(t <= 9) { char c = t+'0'; S.push(c); } else if(t >= 10) { char c = t-10+'A'; S.push(c); } } while(!S.empty()) { char c = S.top(); fout<<c; S.pop(); } fout<<endl; } int change(int n, int base) { int s = n; int len1 = 0, len2 = 0; s = n*n; while(s) { int t = s % base; s /= base; b[len2++] = t; } if(check(b, len2)) print(n, base); } void solve() { read_case(); for(int i = 1; i <= 300; i++) { change(i, Base); } } int main() { solve(); return 0; }