1048. 数字加密
来源:互联网 发布:驱动中国双十一数据 编辑:程序博客网 时间:2024/06/10 06:23
一、题目
本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。
输入格式:
输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1234567 368782971
输出样例:
3695Q8118
二、个人理解
本题主要考察数值计算。题目难度不大。但是有几个关键点。
关键点:
- 个位是第一位。
- 前后A、B两个数字位数一定要相同(虽然我认为这是有点bug的,因为我认为A只要大于等于B即可,但是实际上测试用例中当A>B时,也要将B补0)。
C++:
#include <iostream>using namespace std;int main(){ string a, b; cin >> a >> b; //分别补0,使A和B位数相同 if (a.length() < b.length()) { int s = b.length() - a.length(); string temp = ""; for (int i = 0; i < s; i++) { temp += '0'; } a = temp + a; } if (a.length() > b.length()) { int s = a.length() - b.length(); string temp = ""; for (int i = 0; i < s; i++) { temp += '0'; } b = temp + b; } //对奇数位处理,但要注意个位为第一位 for (int i = 0; i < b.length(); i += 2) { int index = b.length() - 1 - i; int temp1 = ((b[index] - '0') + (a[index] - '0')) % 13; if (temp1 == 10) { b[index] = 'J'; } else if (temp1 == 11) { b[index] = 'Q'; } else if (temp1 == 12) { b[index] = 'K'; } else { b[index] = '0' + temp1; } } //对偶数位进行处理 for (int i = 1; i < b.length(); i += 2) { int index = b.length() - 1 - i; int temp2 = b[index] - a[index]; if (temp2 < 0) { b[index] = '0' + temp2 + 10; } else { b[index] = '0' + temp2; } } cout << b;}
阅读全文
0 0
- PAT 1048. 数字加密
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密
- 1048. 数字加密(20)
- 1048. 数字加密
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- 1048. 数字加密(20)
- C语言调试记录
- c++基础の引用、const
- 线段树求某值之前或之后与其差值不小于k的最近位置
- Hession与webservice调用之间的区别与联系
- 2.4梯度下降法
- 1048. 数字加密
- 田忌赛马
- 凯撒密码加密你的姓名拼音(c)
- 分类算法-支持向量机(SVM)
- linux man page
- Linux配置文件
- Swift
- 动态规划(DP)之入门学习-数字三角形
- Android wifi源码分析(二) Wifi关闭流程