回文数是指从左向右念和从右向左念都一样的数。如123321就是一个典型的回文数。
给定一个进制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 44944264 69696
#include <stdio.h> #include <string.h> char jz[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'}; void itoaa(int a,char *ch,int n) { int t,i=0,j; char cc[100]={0}; while(a) { cc[i++]=jz[a%n]; a/=n; } for(j=0,i-=1;i>=0;i--,j++) { ch[j]=cc[i]; } ch[j+1]=0; } int check(char *ch) { int n,i,j; n=strlen(ch); for(i=0,j=n-1;i<=j;i++,j--) { if(ch[i]!=ch[j]) break; } if(i>j) return 1; else return 0; } int main() { char ch[100]={0},yc[100]={0}; int n; int i; scanf("%d", &n); for(i=1;i<=300;i++) { // itoa(i*i,ch,n);//3是需要转换成几进制 itoaa(i*i,ch,n); itoaa(i,yc,n); if(check(ch)) { printf("%s %s\n",yc,ch); } } return 0; }