Palindromic Squares 回文平方数 (回文数 + 进制转化)

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

题意:

输入 一个 B ,代表几进制,然后输出 所有的 1<= x <= 300 (十进制下)且它的 平方 用 B 进制表示时是回文数的数

思路:

暴力 1- 300 之间的数,判断该数的平方是不是 回文数,如果是的话,就去输出该数

转化进制数 : 除 B 取 模

while(x)
    {
        s[cnt++] = x%B;
        x /= B;
    }
 

CODE:

不知道这个样子   printf("%c",ss[i]-10+'A');   就不对呢,WA 了我好几次

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define memset(a,n) memset(a,n,sizeof(n))
typedef long long LL;
 
LL s[302];
LL ss[302];
LL cnt = 0;
 
LL judge1(LL x,LL y)
{
    LL k = 1;
    cnt=0;
    while(x)
    {
        s[cnt++] = x%y;
        x /= y;
    }
 
    for (LL i = 0; i < cnt/2; i++) // 判断是不是回文数
        if (s[i] != s[cnt-i-1])
        {
            k = 0;
            break;
        }
    if (k == 1) 
        return 1;
    else
        return 0;
}
 
void judge(LL a,LL b,LL n)
{
    int flag, flagg;
    char c,cc;
    flagg = 0;
    memset(s,0);
    memset(ss,0);
    flag = judge1(a,n);

    if(flag)  // 如果是回文数的话,输出
    {
        while(b)
        {
            ss[flagg++] = b%n;
            b /= n;
        }
        for (LL i = flagg-1; i >= 0; i--)
        {
            if (ss[i] <= 9)
               cout<<ss[i];
            else{
                c=ss[i]-10+'A';  // !!! 这里当数大于 10 的时候,只能输出 A B ...
                cout<<c; 
            }
        }
        cout<<' ';
        for (LL i = cnt-1; i >= 0; i--)
        {
            if (s[i] <= 9)
                cout<<s[i];
            else
            {
                cc=s[i]-10+'A';
                cout<<cc;
            }
        }
        cout<<endl;
    }
}
 
int main()
{
    ios::sync_with_stdio(false);
    LL n;
    cin>>n;
    for(LL i = 1; i <= 300; i++)
    {
        memset(s,0);
        memset(ss,0);
        cnt=0;

        judge(i*i,i,n);
    }
}

猜你喜欢

转载自blog.csdn.net/JKdd123456/article/details/82858680
今日推荐