1. 程式人生 > >PAT 進位制迴文數 (進位制轉換+迴文數) - 詳細題解

PAT 進位制迴文數 (進位制轉換+迴文數) - 詳細題解

這道題用到了進位制轉換和迴文數兩個大模擬問題

//進位制迴文數
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
#define ms(x, n) memset(x,n,sizeof(x));
typedef  long long LL;
const LL maxn = 1e10+5;

bool isPalindrome(string str)
{ //判斷是否為迴文數
    int len = str.length();
    for(int i = 0, j = len-1; i <= j; i++, j--) //切記寫為i <= j
        if(str[i] != str[j])
            return false;
    return true;
}
bool solve(LL n, int r)
{ //把n轉換為r進位制存在ans中
    string ans;
    while(n > 0){
        int t = n%r;
        n /= r;
        if(t > 9)
            ans += (t-10+'A');
        else
            ans += (t+'0');
    }
    if(isPalindrome(ans))
        return true;
    else
        return false;
}
int main()
{
    LL n;
    while(cin >> n){
        bool flag = false;
        for(int i = 2; i <= 16; i++)
            if(solve(n, i)){
                flag = true;
                break;
            }
        if(flag) cout << "Yes" << endl;
        else cout << "No" << endl;
    }
    return 0;
}