1. 程式人生 > >PAT 1048 數字加密(20)(程式碼+思路)

PAT 1048 數字加密(20)(程式碼+思路)

1048 數字加密(20)(20 分)

本題要求實現一種數字加密方法。首先固定一個加密用正整數A,對任一正整數B,將其每1位數字與A的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對13取餘——這裡用J代表10、Q代表11、K代表12;對偶數位,用B的數字減去A的數字,若結果為負數,則再加10。這裡令個位為第1位。

輸入格式:

輸入在一行中依次給出A和B,均為不超過100位的正整數,其間以空格分隔。

輸出格式:

在一行中輸出加密後的結果。

輸入樣例:

1234567 368782971

輸出樣例:

3695Q8118

作者: CHEN, Yue

單位: PAT聯盟

時間限制: 400ms

記憶體限制: 64MB

程式碼長度限制: 16KB

PS:

         看清題意,這道題很容易理解,我的思路:

                            1、將2個字串倒敘(提供了2種方法);

                            2、*進行補位(位數不相等要補零);

                            3、按題意進行加密(這裡我對B進行操作)。

                            4、反序輸出

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {
	string A, B, C = { "0123456789JQK" };
	cin >> A >> B;
	A = string(A.rbegin(), A.rend());       //2種倒敘方式
	B = B.assign(B.rbegin(), B.rend());
	while (A.length() != B.length()) {
		if (A.length() > B.length())
			B += '0';
		else
			A += '0';
	}
	int count = 0;
	while (count != A.length() && count != B.length()) {
		count++;
		if (count % 2 == 1) {
			B[count - 1] = C[(B[count - 1] - '0' + A[count - 1] - '0') % 13];
		}
		else {
			int k = (B[count - 1] - A[count - 1]);
			if (k < 0)
				k += 10;
			B[count - 1] = k + '0';
		}
	}
	cout << string(B.rbegin(), B.rend());
	return 0;
}