问题描述
我们得到了由如下加密规则加密而成的一段密文,请你解密出原文。
加密规则:把所有原文中的英文字母以之后的第 k个字母代替,如果超出字母表则转回第一个字母。
例如,规定 k=4, 则字母 ‘A’ 以 ‘E’ 代替(A→B→C→D→E),字母 ‘X’ 以字母 ‘B’ 代替 (X→Y→Z→A→B)。
因此单词 “AXE” 加密后为 “EBI”;如果密文是 “EAEC” 则可以推出明文是 “AWAY”。
给出一段仅有大小写英文字母和数字组成的密文和密钥 k,请你解密出原文。
注意,原文和密文对应位置的字母的大小写应保持一致。
程序算法
//
int key; //定义密钥
string s; //定义字符串
cin >> s;
cin >> key;
key %= 26;
for (int i = 0;i < s.length();i++)
{
if (s[i] >= 'a' && s[i] <= 'z')
{
s[i] -= key;
if (s[i] < 'a')
{
s[i] += 26;
}
}
if (s[i] >= 'A' && s[i] <= 'Z')
{
s[i] -= key;
if (s[i] < 'A')
{
s[i] += 26;
}
}
}
cout << s;
return 0;
输入描述
第一行,一个仅有大小写英文字母和数字组成的密文字符串。
第二行,一个正整数 key。
输出描述
共一行,为解密后的原文字符串。
输入输出样例
输入样例 1
输出样例 1