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 } 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM