本題要求實作一種數字加密方法。首先固定一個加密用正整數 A,對任一正整數 B,将其每 1 位數字與 A 的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對 13 取餘——這裡用 J 代表 10、Q 代表 11、K 代表 12;對偶數位,用 B 的數字減去 A 的數字,若結果為負數,則再加 10。這裡令個位為第 1 位。
輸入格式:
輸入在一行中依次給出 A 和 B,均為不超過 100 位的正整數,其間以空格分隔。
輸出格式:
在一行中輸出加密後的結果。
輸入樣例:
1234567 368782971
輸出樣例:
3695Q8118
-代碼如下
#include <cstdio>
#include <vector>
using namespace std;
//int a[100], b[100];
vector<int> a(100), b(100);
int main()
{
int temp, i = 0, len_a = 0, len_b = 0;
while ((temp = getchar()) != 32) { //當讀到空格的時候 退出循環
a[i++] = temp - 48;
}
len_a = i;
i = 0;
while (scanf("%1d", &temp) != EOF) { //當讀到檔案尾的時候 退出循環
b[i++] = temp;
}
len_b = i;
int len = len_a;
if (len_b > len_a) {
len = len_b;
a.insert(a.begin(), len_b - len_a, 0);
} else if (len_a > len_b) {
len = len_a;
b.insert(b.begin(), len_a - len_b, 0);
}
//flag用來 輔助表示目前準備輸出的是第偶數位 還是 奇數位
//為 1 表示 先是偶數位,為 0 表示 先是奇數位
int flag = (len % 2 == 0 ? 1 : 0);
for (i = 0; i < len; i++)
{
if (flag) { //當為 偶數位
int t = b[i] - a[i];
if (t < 0) {
t += 10;
}
printf("%d", t);
flag = 0;
}
else { //當為 奇數位
int t = (b[i] + a[i]) % 13;
if (t > 9) {
switch (t) {
case 10: printf("J"); break;
case 11: printf("Q"); break;
case 12: printf("K"); break;
}
}
else {
printf("%d", t);
}
flag = 1;
}
}
return 0;
}
結果
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL1EEVPlXT65UMRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zRQpkL2MTNxEDMyAjM3AzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)