本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1234567 368782971
输出样例:
3695Q8118
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int main(){
string s1, s2;
getline(cin, s1);
s2 = s1.substr(s1.find(" ") + , s1.length() - s1.find(" "));
s1.erase(s1.find(" "), s1.length() - s1.find(" "));
while (s2.length() < s1.length()){
s2.insert(, "");
}
//cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
int res;
for (int i = ; i < s2.length() && i < s1.length(); i++){
if (i % == ){
res = (s1[i] - '' + s2[i] - '')%;
if (res < )s2[i] = '' + res;
else if (res == )s2[i] = 'J';
else if (res == )s2[i] = 'Q';
else if (res == )s2[i] = 'K';
}
else{
res = s2[i] - '' - s1[i] + '';
if (res < )res += ;
s2[i] = '' + res;
}
//cout << s2[i] << endl;
}
reverse(s2.begin(),s2.end());
cout << s2;
system("pause");
}
注意点:这题逻辑很简单,就是有一个坑会导致测试点2和6过不去,就是B比A短,要补0直到一样长。