Skip to content

1048 数字加密

Statement

Metadata

  • 作者: CHEN, Yue
  • 单位: 浙江大学
  • 代码长度限制: 16 KB
  • 时间限制: 400 ms
  • 内存限制: 64 MB

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式

在一行中输出加密后的结果。

输入样例

1234567 368782971

输出样例

3695Q8118

Solution

#include <bits/stdc++.h>
using namespace std;
int main() {
    string a, b, s = "";
    cin >> a >> b;
    int len1 = a.size(), len2 = b.size(), i, j, k, num, len;
    if (len1 < len2)
        for (i = len2 - len1; i > 0; i--) a.insert(0, "0");
    else
        for (i = len1 - len2; i > 0; i--) b.insert(0, "0");
    // cout<<a<<endl;
    // cout<<b<<endl;
    len1 = a.size(), len2 = b.size();
    for (i = len1 - 1, k = 1, j = len2 - 1; i >= 0 && j >= 0; i--, j--, k++) {
        if (k % 2) {
            num = a[i] - '0' + b[j] - '0';
            num %= 13;
            // cout<<num<<endl;
            if (num <= 9)
                s += num + '0';
            else if (num == 10)
                s += "J";
            else if (num == 11)
                s += "Q";
            else if (num == 12)
                s += "K";
            // cout<<s<<endl;
        } else {
            num = b[j] - a[i];
            // cout<<num<<endl;
            if (num < 0)
                num += 10;
            s += num + '0';
            // cout<<s<<endl;
        }
    }
    // cout<<b[j]<<endl;
    /*if(len1<len2)
    for(;j>=0;j--) s+=b[j];
    else if(len1>len2)
    for(;i>=0;i--) s+="0";*/
    len = s.size();
    for (i = len - 1; i >= 0; i--) cout << s[i];
    cout << "\n";
}

Last update: May 4, 2022
Back to top