PAT-ADVANCED1019——General Palindromic Number
我的PAT-ADVANCED程式碼倉:https://github.com/617076674/PAT-ADVANCED
原題連結:https://pintia.cn/problem-sets/994805342720868352/problems/994805487143337984
題目描述:
題目翻譯:
1019 廣義迴文數
向前或向後書寫時相同的數字稱為迴文數字。例如,1234321是迴文數字。所有單個數字都是迴文數字。
雖然迴文數通常在十進位制中被考慮,但迴文概念可以應用於任何數字系統中的自然數。考慮基數b >= 2中的數字N > 0,該數字k + 1個數字ai可以轉換為10進位制數(a0 * b ^ 0 + a1 * b ^ 1 + ... + ak * b ^k)。 通常,0 <= ai < b(i = 1, 2, ..., k)且ak非零。當且僅當ai = ak - i(i = 1, 2, ..., k)時,N是一個迴文數。Zero在任何進制中都寫為0,並且根據定義也是迴文。
給定任何正十進位制整數N和進位制b,你需要判斷N是否是b進位制下的迴文數。
輸入格式:
每個輸入檔案包含一個測試用例。每個測試用例由兩個正數N和b組成,其中0 < N <= 10代表十進位制數,2 <= b <= 10代表進位制。 數字用空格分隔。
輸出格式:
對每個測試用例,如果N是基數b中的迴文數,在一行中列印“Yes”,否則列印“No”。然後在下一行中,以“akak - 1...a0”的形式列印N轉換為b進位制數字的形式。請注意,輸出結束時不得有額外的空格。
輸入樣例1:
27 2
輸出樣例1:
Yes
1 1 0 1 1
輸入樣例2:
121 5
輸出樣例2:
No
4 4 1
知識點:進位制轉換
思路:先進位制轉換,再判斷是否是迴文數
時間複雜度和空間複雜度均是O(n),其中n為進位制轉換後的位數。
C++程式碼:
#include<iostream> #include<vector> using namespace std; bool isPalindromic(vector<int> result); int main(){ int N, b; scanf("%d %d", &N, &b); vector<int> result; while(N > 0){ result.push_back(N % b); N /= b; } if(isPalindromic(result)){ printf("Yes\n"); }else{ printf("No\n"); } for(int i = result.size() - 1; i >= 0; i--){ printf("%d", result[i]); if(i != 0){ printf(" "); }else{ printf("\n"); } } return 0; } bool isPalindromic(vector<int> result){ for(int i = 0; i < result.size() / 2; i++){ if(result[i] != result[result.size() - 1 - i]){ return false; } } return true; }
C++解題報告: