小书童——凯撒密码
题目背景
某蒟蒻迷上了 “小书童”,有一天登陆时忘记密码了(他没绑定邮箱 or 手机),于是便把问题抛给了神犇你。
题目描述
蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 $n$ 位形成的。`z` 的下一个字母是 `a`,如此循环。他现在找到了移动前的原文字符串及 $n$,请你求出密码。
输入格式
第一行:$n$。第二行:未移动前的一串字母。
输出格式
一行,是此蒟蒻的密码。
样例 1
样例输入 1
1
qwe
样例输出 1
rxf
提示
字符串长度 ≤50,1≤𝑛≤26。
思路分析
1. 读取n和原字符串。
2. 遍历原字符串的每个字符。
3. 对于每个字符,计算其ASCII码值加上n后对26取模的结果,再加上'a'的ASCII码值,得到新的字符。
4. 将新的字符替换原字符串中对应的字符。
5. 输出修改后的字符串作为密码。
示例代码
#include <iostream>
#include <cstring>
using namespace std;
// 声明一个足够大的字符数组来存储输入的字符串
char a[10000];
int n;
int main() {
// 输入移动位数
cin >> n;
// 输入原字符串
cin >> a;
// 获取原字符串的长度
int len = strlen(a);
// 遍历原字符串中的每个字符
for (int i = 0; i < len; i++) {
for (int j = 0; j < n; j++) {
// 将当前字符向后移动一位(但这里实际上会因为循环而移动多次)
a[i]++;
// 如果移动后超出了'z',则循环回到'a'
if (a[i] > 'z') {
a[i] = 'a';
}
}
}
// 输出修改后的字符串,即密码
cout << a << endl;
return 0;
}