1. 程式人生 > >PAT-ADVANCED1019——General Palindromic Number

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++解題報告: