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 位的正整数,其间以空格分隔。
输出格式
在一行中输出加密后的结果。
输入样例
输出样例
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