Description
回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。 给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
Input
共一行,一个单独的整数B(B用十进制表示)。
Output
每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。
Sample Input
10
Sample Output
1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696
代码如下:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <string>
#include <cmath>
#include <stack>
#include <queue>
#include <map>
#define MAXN 0x3f3f3f3f
using namespace std;
typedef long long LL;
int main()
{
int n,a[100],b[100];
cin >> n;
for(int i=1; i<=300; i++)
{
int m=i*i,j=0,t=1,p,o;
while(t!=0)
{
t=m/n;
a[j++]=m%n;
m=t;
}
t=1,p=i,o=0;
while(t!=0)
{
t=p/n;
b[o++]=p%n;
p=t;
}
int flag = 0;
for(int i=0; i<j/2; i++)
{
if(a[i]!=a[j-i-1])
flag = 1;
}
if(!flag)
{
for(int i=o-1;i>=0;i--)
{
if(b[i]>=10)
printf("%c",b[i]+55);
else
cout << b[i];
}
cout << " " ;
for(int i=0;i<j;i++)
{
if(a[i]>=10)
printf("%c",a[i]+55);
else
cout << a[i];
}
cout << endl;
}
}
return 0;
}