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;}
原创粉丝点击