1048 数字加密 (20 分)
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
代码语言:javascript复制1234567 368782971
输出样例:
代码语言:javascript复制3695Q8118
【我的代码】
代码语言:javascript复制 1// 1048 数字加密 (20 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
2//
3
4#include <iostream>
5#include <string>
6#include <algorithm>
7using namespace std;
8int main()
9{
10 string a, b, res;
11 cin >> a >> b;
12 //处理
13 reverse(a.begin(), a.end());
14 reverse(b.begin(), b.end());
15 if (a.length() < b.length())
16 a = string(b.length() - a.length(), '0');
17 else if (a.length() > b.length())
18 b = string(a.length() - b.length(), '0');
19 int len = b.length();
20 for (int i = 0; i < a.length(); i ) {
21 if (i % 2 == 0) {
22 int temp = (a[i] b[i] - '0' - '0') % 13;
23 if (temp == 10) res = 'J';
24 else if (temp == 11) res = 'Q';
25 else if (temp == 12) res = 'K';
26 else res = temp '0';
27 }
28 else {
29 res = (b[i] - a[i] 10) % 10 '0';
30 }
31 }
32 reverse(res.begin(), res.end());
33 cout << res;
34}
【思路】
这个提示太具有误导性了,根本不知道当b的长度小于a的长度的时候如何处理,导致一开始测试点2和5一直过不去,后面看了大神的代码才发现,原来需要补充0。感觉有点坑。。
另外一个注意的点就是C 有reverse的方法可以使用,如果对包不太熟,可能需要一定时间处理。