2248. Day1 C - 基本变量类型练习 II - 凯撒加密算法

如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第 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; }

登录以提交代码。
单点时限 1 秒
内存限制 128 MB
提交 390
通过 213