1048 数字加密 (20 分)

2019-10-13 15:17:04 浏览数 (1)

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的方法可以使用,如果对包不太熟,可能需要一定时间处理。

0 人点赞