PAT乙级练习题B1048. 数字加密
来源:互联网 发布:网络诈骗手段及防范 编辑:程序博客网 时间:2024/06/11 10:30
题目描述
本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。
输入格式:
输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1234567 368782971
输出样例:
3695Q8118
题目解析
需要考虑A和B不等长,开始我以为是按照B的长度输出,如果A不够长就补零,太长就裁掉;后来发现是按照A和B中最长的来输出,把短的补零到和长的一样长。
代码
#include<iostream>#include<string>#include<cmath>using namespace std;int main(){ string A, B, C; cin >> A >> B; int z = A.size() - B.size(); string zeros(abs(z), '0'); if (A.size() > B.size()) { B = zeros + B; } if (B.size() > A.size()) { A = zeros + A; } for (int i = B.size() - 1,j=1; i >= 0; --i,++j) { int b = B[i] - '0', a = A[i] - '0',c; char ch; if (j % 2 == 1) { c = (a + b) % 13; switch (c) { case 10: ch = 'J'; break; case 11: ch = 'Q'; break; case 12: ch = 'K'; break; default: ch = '0' + c; break; } } else { c = b - a; if (c < 0) { c += 10; } ch = '0' + c; } C = ch + C; } cout << C << endl; system("pause"); return 0;}
代码简化
可以将13进制数的表示部分的代码进行简化。
c = (a + b) % 13;switch (c) { case 10: ch = 'J'; break; case 11: ch = 'Q'; break; case 12: ch = 'K'; break; default: ch = '0' + c; break; }
替换成
string thi = "0123456789JQK";c = (a + b) % 13;ch = thi[c];
0 0
- PAT乙级练习题B1048. 数字加密
- PAT B1048. 数字加密
- PAT B1048. 数字加密(20)
- PAT:B1048. 数字加密(16/20)
- B1048. 数字加密(20)
- B1048. 数字加密(20)
- [PAT-乙级]1048.数字加密
- PAT乙级1048 数字加密
- PAT乙级练习题B1012. 数字分类
- PAT乙级练习题B1019.数字黑洞
- PAT乙级练习题B1044. 火星数字
- PAT 乙级练习题1012. 数字分类 (20)
- PAT 乙级练习题1019. 数字黑洞 (20)
- PAT乙级.1048. 数字加密(20)
- PAT 乙级 1048. 数字加密(20)
- 1048. 数字加密(20)PAT乙级
- PAT 乙级 1048. 数字加密(20)
- PAT乙级 1048. 数字加密(20)
- Android Binder机制(三) ServiceManager守护进程
- 如何测试java中对象的等价性
- mac os下重置mysql密码
- Linux的oops内核调试信息 && Linux Kernel Panic报错解决思路
- Linux命令--dpkg
- PAT乙级练习题B1048. 数字加密
- Leetcode 66. Plus One (Easy) (cpp)
- Java 数组的详解
- linux (ubuntu) 虚拟环境下扩展硬盘空间
- 在线实时大数据平台Storm开发之wordcount
- Unity-3D物体的遮罩
- 防止提交 AppStore 各种事故的发生
- Ubuntu14.04.4安装搜狗输入法
- iOS 解决在Storyboard中修改UITableViewCell背景色无效果的问题