PAT 進位制迴文數 (進位制轉換+迴文數) - 詳細題解
阿新 • • 發佈:2018-11-19
這道題用到了進位制轉換和迴文數兩個大模擬問題
//進位制迴文數 #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; }