1. 程式人生 > >PAT-BASIC1048——數字加密

PAT-BASIC1048——數字加密

題目描述:

知識點:字串

思路:根據題述規則加密即可

本題有一個坑點:

當B字串的長度小於A字串的長度時,加密時需要在B字串前面補0直至和A字串的長度相等。否則無法通過測試點2和測試點5。

當然我的做法不是在B字元前面補0,而是用0代替B中的字元去計算索引大於B字串長度而小於等於A字串長度那部分的加密數字。

時間複雜度是O(n),其中n為字串A和字串B中較大的長度值。空間複雜度也是O(n)。

C++程式碼:

#include<iostream>
#include<string>

using namespace std;

int main(){
	
	string a;
	string b;
	
	cin >> a >> b;
	
	int index = 1;
	string result = "";
	while(true){
		if(index > a.length() && index > b.length()){
			break;
		}else if(index > a.length() && index <= b.length()){
			result += b[b.length() - index];
			index++;
		}else if(index <= a.length() && index > b.length()){
			if(index % 2 == 1){
			int sum = (a[a.length() - index] - '0') % 13;
			if(sum == 10){
				result += 'J';
			}else if(sum == 11){
				result += 'Q';
			}else if(sum == 12){
				result += 'K';
			}else{
				result += (sum + '0');
			}
			index++;
		}else if(index % 2 == 0){
			int diff = -(a[a.length() - index] - '0');
			if(diff < 0){
				diff += 10;
			}
			result += (diff + '0');
			index++;
		}
		}else if(index % 2 == 1){
			int sum = ((a[a.length() - index] - '0') + (b[b.length() - index] - '0')) % 13;
			if(sum == 10){
				result += 'J';
			}else if(sum == 11){
				result += 'Q';
			}else if(sum == 12){
				result += 'K';
			}else{
				result += (sum + '0');
			}
			index++;
		}else if(index % 2 == 0){
			int diff = (b[b.length() - index] - '0') - (a[a.length() - index] - '0');
			if(diff < 0){
				diff += 10;
			}
			result += (diff + '0');
			index++;
		}
	}
	
	for(int i = result.length() - 1; i >= 0; i--){
		cout << result[i];
	}


	return 0;
}

C++解題報告: