1048. 数字加密(20)

2/22/2017来源:ASP.NET技巧人气:1768

数字加密(20)

时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。

输入格式:

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

输出格式:

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

输入样例: 1234567 368782971 输出样例: 3695Q8118

#include<iostream> #include<math.h> #include<string> using namespace std; int main() { string s1, s2; int i = 0, j = 0, m, n; cin >> s1 >> s2; n = s1.size(); m = s2.size(); string s3(labs(m - n), '0'); if (m > n) { s3.append(s1); s1 = s3; } else { s3.append(s2); s2 = s3; } n = s1.size(); m = s2.size(); i = 0; j = 0; while (m - i) { if ((m - i) % 2) { int k = (s2[i] - '0' + s1[j] - '0') % 13; if (k < 10)cout << k; else { if (k == 10)cout << "J"; else if (k == 11)cout << "Q"; else if (k == 12)cout << "K"; } } else { int k = s2[i] - s1[j]; if (k < 0)cout << k + 10; else cout << k; } j++; i++; } return 0; }