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 } 
时间: 2024-08-02 15:14:39

PAT 1048. 数字加密(20)的相关文章

PAT 乙级 1048 数字加密(20) C++版

1048. 数字加密(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余--这里用J代表10.Q代表11.K代表12:对偶数位,用B的数字减去A的数字,若结果为负数,则再加10.这里令个位为第1位. 输入格式: 输入在一行中依次给出A和B,均为不

1048. 数字加密(20)

1048. 数字加密(20) 本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余--这里用J代表10.Q代表11.K代表12:对偶数位,用B的数字减去A的数字,若结果为负数,则再加10.这里令个位为第1位. 输入格式: 输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔. 输出格式: 在一行中输出加密后的结果. 输入样例: 1234567 368782971 输出样

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

1048. 数字加密(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10.Q代表11.K代表12:对偶数位,用B的数字减去A的数字,若结果为负数,则再加10.这里令个位为第1位. 输入格式: 输入在一行中依次给出A和B,均为不

PTA乙级 (1048 数字加密 (20分))

1048 数字加密 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805276438282240 第一次提交:  错误原因:a的位数大于b时,b不足的位需要补0做运算! 第二次提交: 代码: #include <iostream> #include <cstring> #include <string> #include <cmath> #include <alg

PAT 1048数字加密

本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10.Q 代表 11.K 代表 12:对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10.这里令个位为第 1 位. 输入格式: 输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔. 输出格式: 在一行中输出加密后的结果. 输入样例: 1234567 3

PAT 1048 数字加密(字符串)

本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10.Q 代表 11.K 代表 12:对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10.这里令个位为第 1 位. 输入格式: 输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔. 输出格式: 在一行中输出加密后的结果. 输入样例: 1234567 3

1048 数字加密(20 分)

1048 数字加密(20 分) 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余--这里用 J 代表 10.Q 代表 11.K 代表 12:对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10.这里令个位为第 1 位. 输入格式: 输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔. 输出格式: 在一行中输出加密后的结果.

PAT B1048 数字加密

PAT B1048 数字加密 题目描述: 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10.Q 代表 11.K 代表 12:对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10.这里令个位为第 1 位. 输入格式: 输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔. 输出格式: 在一行中输出加密

1048 数字加密

本题要求实现一种数字加密方法.首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余--这里用J代表10.Q代表11.K代表12:对偶数位,用B的数字减去A的数字,若结果为负数,则再加10.这里令个位为第1位. 输入格式: 输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔. 输出格式: 在一行中输出加密后的结果. 输入样例: 1234567 368782971 输出样例: 3695Q8118 1