1 2 3 4

PAT乙级1048-----数字加密 (20分)

1048 数字加密 (20分)

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

输入格式:

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

输出格式:

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

输入样例:

1234567 368782971
 

输出样例:

3695Q8118

要注意的地方:
输入以最大位数为主
例如:12345 1 看作是12345 00001
123 12345看作是 00123 12345
首次通过代码:
 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main(){
 5     char key[101];
 6     char user_input[101];
 7     char final_input[101];
 8     scanf("%s %s",key,user_input);
 9     int key_len=strlen(key)-1;
10     int user_input_len=strlen(user_input)-1;
11     int max;
12     if(key_len>user_input_len) max=key_len;
13     else max=user_input_len;
14     int flag=1;int flag1=1;
15     final_input[max+1]='\0';
16     while(1){
17         if(user_input_len<0) {
18             if(flag1){
19                for(int i=0;i<=key_len;i++){
20                user_input[i]='0';
21             }
22             flag1=0;
23             user_input_len=key_len;
24             continue;
25             }
26             break;
27         }
28         else if(key_len<0){
29             for(int i=user_input_len;i>=0;i--){
30                 final_input[max--]=user_input[i];
31             }
32             break;
33         }
34         if(flag){
35             flag=0;
36             int x=(key[key_len]+user_input[user_input_len]-'0'-'0')%13;
37             if(x>=0&&x<=9) final_input[max--]=x+'0';
38             else {
39                 switch(x){
40                     case 10:final_input[max--]='J';break;
41                     case 11:final_input[max--]='Q';break;
42                     case 12:final_input[max--]='K';break;
43                 }
44             }
45             
46         }
47         else {
48            flag=1;
49            int x=user_input[user_input_len]-key[key_len];
50            if(x<0) x+=10;
51            final_input[max--]=x+'0';
52            
53         }
54         user_input_len--;
55         key_len--;
56     }
57 
58      printf("%s",final_input);
59      return 0;
60     
61 }
View Code

 

 
posted @ 2020-02-26 12:40  Qianren  阅读(155)  评论(0编辑  收藏  举报