数字加密
题目描述
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。写程序找出冠军队。
输入格式
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式
在一行中输出加密后的结果。
输入样例1
1 | 1234567 368782971 |
输出样例1
1 | 3695Q8118 |
输入样例2
1 | 1234567 782971 |
输出样例2
1 | 15Q8118 |
问题解决
解题思想
一开始看本题时感觉思路很简单,代码实现也很简单,直到提交时发现测试点2和5出错才知道有坑。原题只给了输入输出样例1,仅从样例1我们可能只能推出 B 比 A 长时长出的部分原样输出即可,相当于没加密。但是 A 比 B 长时该怎样处理呢?可能我们就不得而知了。其实题目的真正意思是这样的:若 B 比 A 长则 A 前面补0直到与 B 等长(对于此题,此情况可以忽视,想一下为什么?),若 A 比 B 长则 B 前面补0直到与A等长,然后再进行加密。如果仅从题目描述和样例1来判断,我们可能不太容易能得出这样的题意,那么本题的难点就可以说是题目描述不清楚了,这可能类似很多其它乙级题目的坑。
坑点提醒
测试点2和5答案错误,这两个测试点都是 A 比 B 长的情况,处理好了就通过了。
代码示例(C/C++)
1 |
|
题目来源:PAT乙级1048
作者:CHEN, Yue
单位:浙江大学