2498 - 回文平方数

回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。

给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示1011等等。

题目输入

输入包含多组测试数据

共一行,一个单独的整数B(B用十进制表示)

题目输出

每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。

输入/输出样例

题目输入

10

题目输出

1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

C++解答

#include <bits/stdc++.h>
using namespace std;
int n;
char a[400];
int did(int data)
{
    int ans=0;
    memset(a,'\0',sizeof(a));
    while(data){
        int kk=data%n;
        data=data/n;
        if (kk<10){
            a[ans++]=kk+'0';
        } else a[ans++]=kk-10+'A';
    }
    for (int i=0;i<ans/2;i++){
        if (a[i]!=a[ans-1-i]){
            return 0;
        }
    }
    return 1;
}
void pri(int data)
{
    stack<char>sta;
    while(data){
        int kk=data%n;
        data=data/n;
        if (kk<10){
            sta.push(kk+'0');
        } else sta.push(kk-10+'A');
    }
    while(sta.size()){
        printf("%c",sta.top());
        sta.pop();
    }
}
int main()
{
    while(scanf("%d",&n)!=EOF){
        for (int i=1;i<=300;i++){
            if (did(i*i)){
                pri(i);
                printf(" %s\n",a);
            }
        }
    }
    return 0;
}

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题