2498 - 回文平方数
回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
题目输入
输入包含多组测试数据
共一行,一个单独的整数B(B用十进制表示)。
题目输出
每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。
输入/输出样例
题目输入
10
题目输出
1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696
C++解答
#include <bits/stdc++.h> using namespace std; int n; char a[400]; int did(int data) { int ans=0; memset(a,'\0',sizeof(a)); while(data){ int kk=data%n; data=data/n; if (kk<10){ a[ans++]=kk+'0'; } else a[ans++]=kk-10+'A'; } for (int i=0;i<ans/2;i++){ if (a[i]!=a[ans-1-i]){ return 0; } } return 1; } void pri(int data) { stack<char>sta; while(data){ int kk=data%n; data=data/n; if (kk<10){ sta.push(kk+'0'); } else sta.push(kk-10+'A'); } while(sta.size()){ printf("%c",sta.top()); sta.pop(); } } int main() { while(scanf("%d",&n)!=EOF){ for (int i=1;i<=300;i++){ if (did(i*i)){ pri(i); printf(" %s\n",a); } } } return 0; }