PAT 1048 數字加密(20)(程式碼+思路)
阿新 • • 發佈:2019-02-13
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; }