如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第 4 个字母置换第一个字母,即以 D 代 A,以此类推 —— 苏维托尼乌斯,罗马十二帝王传
凯撒密码是世界上最早出现的加密算法了,它将字母向后推三个字母,得到加密符号,如 'A' + 3 = 'D', 'W' + 3 = 'Z', 'Y' + 3 = 'B'
虽然这份加密算法在当下显得是如此儿戏,但是有理由相信它足够安全。因为凯撒大部分敌人都是目不识丁,而其余人则可能将这些消息当作是某个未知的外语
关于凯撒加密的更多信息,可以查看 wiki 的相关页面
本题我们来实现这个加密算法
正如上一题中所提到的,char 类型通常占用 1 个字节。若使用有符号的 char,其常见取值范围为 -128 \sim 127。char 转换为 int 时,数值会被完整保留;int 转换为 char 时,只有当该整数位于 char 的取值范围内,才能保证转换后的值不变。如果超出范围,转换结果可能与原值不同。因此,进行转换前应先判断数值是否在合法范围内。例如:
char c = 65;
int n = c; // n 的值为 65
int x = 100;
char ch = x; // ch 的值为 100
int y = 200;
char ch2 = y; // 超出有符号 char 的常见范围,结果可能与 200 不同
引用 wiki 的一段信息:
凯撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A = 0,B = 1,...,Z = 25。此时偏移量为 n 的加密方法即为: E_n(x) = (x + n) \bmod 26
那么,你能解决这个问题了吗?
输入
输入仅一行,一个大写字母 Char ('A' \le Char \le 'Z') 和一个偏移量 n (1 \le n \le 25),由空格分隔
输出
输出仅一行,一个字符,表示加密后的字母
样例
| 标准输入 复制文本 |
A 5 |
| 标准输出 复制文本 |
F |
| 标准输入 复制文本 |
Y 2 |
| 标准输出 复制文本 |
A |
提示
如果需要更多提示,可以试着运行以下代码,观察运行结果
#include <iostream>
using namespace std;
int main() {
char c = 'F';
int a = c;
cout << c << " " << (int)c << endl;
cout << a << " " << (int)'A' << endl;
cout << c - 65 << " " << a - 'A' << endl;
return 0;
}