Palindromic Squares
Palindromic SquaresDescription回文数就是顺着读和反着读都是一样的数字数字12321就是一个典型的回文数。给出一个表示进制的数字B(2B20 B是以十进制的数字呈现)如果整数N满足它的平方数在B进制下为回文数则输出整数N(1 N300 N也是以十进制的数字呈现) 同时也输出这个平方数。输出满足条件的原数字在进制B下的数字以及它的平方在进制B下的数字PROGRAM NAME: palsquareINPUT FORMAT输入一行表示B(B规定以十进制数表示)SAMPLE INPUT (file palsquare.in)10OUTPUT FORMAT每行包含两个整数第一个整数是其平方为回文的数字第二个是平方数本身两个数之间用空格分开。注意两个数字都是以进制B表示。SAMPLE OUTPUT (file palsquare.out)1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696设计算法此处需要注意一个问题题目并没有要求原数字在n进制下也要是回文数。这道题其实很简单需要写一个进制转换函数和一个判断一个数字是不是回文数的函数就基本上解决了一个数如果是回文数其实那么把它当成一个字符串来看它也是回文的而且用字符串来进行处理会方便快捷得多所以我们只需要把数字转换为字符串来做那么这个问题就没什么障碍了。C编写/* ID: your_id_here TASK: palsquare LANG: C */ #includeiostream #includecstdio #includestring #includealgorithm using namespace std; const string t0123456789ABCDEFGHIJ; int B; string conv(int N) { string num; while(N0) { int a N%B; N/B; num t[a]; } reverse(num.begin(),num.end()); return num; } bool check(string s) { int lens.size(); for(int i0;ilen/2;i) { if(s[i]!s[len-1-i]) return false; } return true; } void solve(int n) { int sqn*n; if(check(conv(sq))) { coutconv(n) conv(sq)endl; } } int main() { freopen(palsquare.in,r,stdin); freopen(palsquare.out,w,stdout); cinB; for(int i1;i300;i) { solve(i); } return 0; }