这题只要枚举1-300之间,然后判断i*i在b进制下是否为回文数,是的话,记录这两个数的b进制表示方式。。= =一开始写的时候没看清,直接输出了十进制。。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5010;
char s[]={"0123456789ABCDEFGHIJK"};
char a[1000];
bool isplind(int t,int i)
{
    int k=0;
    //char a[1000];
    while(t)
    {
        a[k++]=s[t%i];
        t/=i;
    }
    a[k]=0;
    for(i=0;i<k/2;i++)
        if(a[i]!=a[k-i-1])
            break;
    return i==k/2;
}
int main()
{
    int i,j,b;
    string ss;
    scanf("%d",&b);
    for(i=1;i<=300; i++)
    {
        ss="";
        if(isplind(i*i,b))
        {
            j=i;
            while(j)
            {
                ss+=s[j%b];
                j/=b;
            }
            reverse(ss.begin(),ss.end());
            cout<<ss;
            printf(" ");
            puts(a);
        }
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。

Post Navigation