回文平方数

回文数是指从左向右念和从右向左念都一样的数。如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;
}

 

posted @ 2018-09-12 19:06  ~~zcy  阅读(439)  评论(0编辑  收藏  举报