前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1048 数字加密 (20 分)

1048 数字加密 (20 分)

作者头像
可爱见见
发布2019-10-13 15:17:04
7970
发布2019-10-13 15:17:04
举报
文章被收录于专栏:卡尼慕

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡尼慕 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入格式:
  • 输出格式:
  • 输入样例:
  • 输出样例:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档