PAT B1048 数字加密

PAT B1048 数字加密

题目描述:

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

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

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

  输入样例:
  1234567 368782971

  输出样例:
  3695Q8118

参考代码:

 1 /****************************************************
 2 PAT B1048 数字加密
 3 ****************************************************/
 4 #include <iostream>
 5 #include <string.h>
 6
 7 using namespace std;
 8
 9 const char MOD_RESOULT[] = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘J‘, ‘Q‘, ‘K‘ };
10
11 int main() {
12     string key, num;
13
14     cin >> key >> num;
15
16     string ans = num.size() >= key.size() ? num : key;        //此处仅仅是为了让ans的长度等于key与num中最长的
17
18     for (int i = 0; i < num.size() || i < key.size(); ++i) {
19         //如果出现key和num长度不同的情况需要给较短的那个补‘0’
20         char numInKey = i >= key.size() ? ‘0‘ : key[key.size() - 1 - i];
21         char numInNum = i >= num.size() ? ‘0‘ : num[num.size() - 1 - i];
22
23         if (i % 2 == 0) {
24             ans[ans.size() - 1 - i] = MOD_RESOULT[(numInKey + numInNum - 2 * ‘0‘) % 13];
25         }
26         else {
27             int n = numInNum - numInKey;
28             ans[ans.size() - 1 - i] = n < 0 ? MOD_RESOULT[n + 10] : MOD_RESOULT[n];
29         }
30     }
31
32     cout << ans;
33
34     return 0;
35 }

注意事项:

  1:本题有个很“坑”的地方:A、B的长度不一致,需要给长度不够进行补‘0’。答案的长度和A、B中最长的长度相同;另外在B比较长的情况下直接令ans = B,在for循环中i < A、B的最小长度为边界调节得出来的结果也是正确的,但是当A的长度比较长的时候这样做就不正确了!

  2:之前出错的时候查了好多其他人的代码,基本上都是先将A、B反转在处理,最后再将结果反转,怎么说呢,感觉并没有这个必要。

原文地址:https://www.cnblogs.com/mrdragon/p/11412189.html

时间: 2024-10-09 23:23:41

PAT B1048 数字加密的相关文章

PAT 1048数字加密

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

PAT 1048. 数字加密(20)

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

PAT 1048 数字加密(字符串)

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

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,均为不

数组-14. 数字加密

1 /* 2 * Main.c 3 * E14-数组-14. 数字加密 4 * Created on: 2014年8月25日 5 * Author: Boomkeeper 6 ********测试通过******* 7 */ 8 9 #include <stdio.h> 10 11 int main(void) { 12 13 int in; 14 int num[5]; 15 16 scanf("%4d", &in); 17 18 //拆分4位数的各位数 19 i

11-1048.数字加密

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,均为不

PAT 1012 数字分类 C语言

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: A3 = 被5除后余2的数字的个数: A4 = 被5除后余3的数字的平均数,精确到小数点后1位: A5 = 被5除后余4的数字中最大数字. 输入格式: 每个输入包含1个测试用例.每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数.数字间以空格分隔. 输出格式:

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,均为不