1. 程式人生 > >Palindromic Squares 迴文平方數 (迴文數 + 進位制轉化)

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);
    }
}