加密的运算为:对明文中的每个字母c,按照密钥k (A~Z)进行0~25的右偏移生成密文m。
那么解码的运算为:对密文中的每个字母m,按照密钥k(A~Z)进行0~25的左偏移生成明文c。
#include <iostream>
#include <string>
using namespace std;
void solve(string k, string m) {
int lk = k.size(), lm = m.size();
string s;
for (int i = 0; i < lk; i++)
if (k[i] >= 'a' && k[i] <= 'z')
k[i] = k[i] - 'a' + 'A';
for (int i = 0; i < lm; i++) {
if (m[i] >= 'A' && m[i] <= 'Z') {
s += (m[i] - 'A' + 26 - (k[i % lk] - 'A')) % 26 + 'A';
}
else {
s += (m[i] - 'a' + 26 - (k[i % lk] - 'A')) % 26 + 'a';
}
}
cout << s;
}
int main() {
string st1, st2;
cin >> st1 >> st2;
solve(st1, st2);
return 0;
}