回文平方数
回文数是指从左向右念和从右向左念都一样的数。如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 <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
char aa[100];
char bb[100];
ll yang2()
{
ll n=strlen(aa);
ll i,ans=0;
for(i=0;i<n/2;i++)
{
if(aa[i]==aa[n-i-1])
ans++;
}
if(ans>=n/2)
return 1;
else
return 0;
}
ll yang(ll n,ll a)
{
ll m;
memset(aa,0,sizeof(aa));
ll i=0;
while(n)
{
if(n%a>=10)
aa[i]=char('A'+(n%a-10));
else
aa[i]=n%a+48;
n/=a;
i++;
}
aa[i]=0;
ll ans=yang2();
if(ans==1)
return 1;
else
return 0;
}
ll yang4()
{
ll n=strlen(bb);
ll i;
char t;
for(i=0;i<n/2;i++)
{
t=bb[i];
bb[i]=bb[n-i-1];
bb[n-i-1]=t;
}
}
ll yang3(ll n,ll a)
{
ll m;
memset(bb,0,sizeof(bb));
ll i=0;
while(n)
{
if(n%a>=10)
bb[i]=char('A'+(n%a-10));
else
bb[i]=n%a+48;
n/=a;
i++;
}
bb[i]=0;
yang4();
}
int main()
{
ll n,i,j,b;
cin>>b;
for(i=1;i<=300;i++)
{
ll ans=yang(i*i,b);
if(ans==1)
{
yang3(i,b);
cout<<bb<<" "<<aa<<endl;
}
}
return 0;
}