PAT (Basic Level) Practice (中文)1048 数字加密 (20 分)

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118
 1 #include <iostream>
 2 #include <string>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <algorithm>
 6 #include <set>
 7 #include <queue>
 8 using namespace std;
 9 int a[105];
10 int b[105];
11 char c[105];
12 string str1,str2; 
13 int main()
14 {
15     while(cin>>str1>>str2){
16         memset(a,0,sizeof(a));
17         memset(b,0,sizeof(b));
18         int len1=str1.length();
19         int len2=str2.length();
20         int len=max(len1,len2);
21         for(int i=len1-1;i>=0;i--){
22             a[i]=str1[len1-i-1]-'0';
23         }
24         for(int i=len2-1;i>=0;i--){
25             b[i]=str2[len2-i-1]-'0';
26         }
27         for(int i=0;i<len;i++){
28             if(i%2==0){
29                 if((a[i]+b[i])%13<10){
30                     c[i]=((a[i]+b[i])%13)+'0';
31                 }else if((a[i]+b[i])%13==10){
32                     c[i]='J';
33                 }else if((a[i]+b[i])%13==11){
34                     c[i]='Q';
35                 }else if((a[i]+b[i])%13==12){
36                     c[i]='K';
37                 }
38             }else{
39                 c[i]=(b[i]-a[i]+10)%10+'0';
40             } 
41         } 
42         for(int i=len-1;i>=0;i--){
43             cout<<c[i];
44         }
45         cout<<endl;
46     }
47     return 0;
48 }
posted @ 2019-07-16 12:42  wydxry  阅读(239)  评论(0编辑  收藏  举报
Live2D