1048 數字加密 (20 分) //部分正確
阿新 • • 發佈:2019-01-02
1048 數字加密 (20 分)
本題要求實現一種數字加密方法。首先固定一個加密用正整數 A,對任一正整數 B,將其每 1 位數字與 A 的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對 13 取餘——這裡用 J 代表 10、Q 代表 11、K 代表 12;對偶數位,用 B 的數字減去 A 的數字,若結果為負數,則再加 10。這裡令個位為第 1 位。
輸入格式:
輸入在一行中依次給出 A 和 B,均為不超過 100 位的正整數,其間以空格分隔。
輸出格式:
在一行中輸出加密後的結果。
輸入樣例:
1234567 368782971
輸出樣例:
3695Q8118
部分正確(16分)
測試點2、測試點5答案錯誤
具體錯在哪了沒有看出來,下面的就是按照題目的要求模擬手工過程的。
很迷。
#include<iostream> #include<string> #include<algorithm> using namespace std; int main() { string A; string B; cin >> A >> B; string r = B; int min = A.length() < B.length() ? A.length() : B.length(); reverse(A.begin(),A.end()); reverse(B.begin(), B.end()); for (int i = 0; i <min ; i++) { if ((i + 1) % 2 == 0) { //偶數 if (B[i] - A[i] >= 0) r[i] = B[i] - A[i] +'0'; else r[i] = B[i] - A[i] + 10+'0'; } else { //奇數 int t = (A[i] + B[i] - 2 * '0')%13; if (t < 10) r[i] = t + '0'; if (t == 10) r[i] = 'J'; if (t == 11) r[i] = 'Q'; if (t == 12) r[i] = 'K'; } } if (min == A.length()) { for (int i = A.length(); i < B.length(); i++) r[i] = B[i]; } reverse(r.begin(), r.end()); cout << r; return 0; }