首页 > 代码库 > PAT 1048. 数字加密(20)

PAT 1048. 数字加密(20)

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

输入格式:

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

输出格式:

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

输入样例:

1234567 368782971

输出样例:

3695Q8118
代码写的又多又冗余,需注意的是,当B的长度小于A的长度时B需要前端补零,以及最后一个测试点当B长度小于A长度时,A元素为零需要做特殊处理。
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #include<ctype.h>
 5 #include<math.h>
 6 int main(){
 7     char a[110];
 8     char b[110];
 9     scanf("%s",a);
10     getchar();
11     scanf("%s",b);
12     char c[110];
13     int lena = strlen(a);
14     int lenb  = strlen(b);
15     int j;
16     int temp;
17     if(lenb-lena>=0){
18             for(int i=0;i<lenb-lena;i++){
19                 printf("%c",b[i]);
20         }
21         j = 0;
22         temp = lena;
23         for(int i=lenb-lena;i<lenb;i++){
24             if((temp--)%2==0){
25                 b[i] = b[i]-a[j];
26                 if(b[i]<0){
27                     b[i] = b[i]+10;
28                 }
29                 b[i] = b[i]+0;
30             }
31             else{
32                 if((b[i]-0+a[j]-0)%13>=10){
33                     if((b[i]-0+a[j]-0)%13==10)
34                         b[i] = J;
35                     else if((b[i]-0+a[j]-0)%13==11){
36                         b[i] = Q;
37                     }
38                     else if((b[i]-0+a[j]-0)%13==12){
39                         b[i] = K;
40                     }
41                 }
42                 else{
43                     b[i] = (b[i]-0+a[j]-0)%13+0;
44                 }
45                 
46             }
47             j++;
48             printf("%c",b[i]);
49         }
50     } 
51     else{
52         temp = lena;
53         for(int i=0;i<lena-lenb;i++){
54             if((temp--)%2==0){
55                 if(a[i]!=0)
56                     printf("%c",9+1-a[i]+0);
57                 else
58                     printf("0");
59             }
60             else{
61                 printf("%c",a[i]);
62             }
63         }
64         j = lena-lenb;
65         temp = lenb;
66         for(int i=0;i<lenb;i++){
67             if((temp--)%2==0){
68                 b[i] = b[i]-a[j];
69                 if(b[i]<0){
70                     b[i] = b[i]+10;
71                 }
72                 b[i] = b[i]+0;
73             }
74             else{
75                 if((b[i]-0+a[j]-0)%13>=10){
76                     if((b[i]-0+a[j]-0)%13==10)
77                         b[i] = J;
78                     else if((b[i]-0+a[j]-0)%13==11){
79                         b[i] = Q;
80                     }
81                     else if((b[i]-0+a[j]-0)%13==12){
82                         b[i] = K;
83                     }
84                 }
85                 else{
86                     b[i] = (b[i]-0+a[j]-0)%13+0;
87                 }
88                 
89             }
90             j++;
91             printf("%c",b[i]);
92         }
93     }
94     
95 } 

 

PAT 1048. 数字加密(20)