CF153C Caesar Cipher 题解

· · 题解

翻译(题目描述)

凯撒密码是最简单的加密技术之一。要使用密钥 k 将原始消息转换为加密后的消息,必须将每个字母替换为拉丁字母表中后面 k 个位置的字母(如果该位置超出字符 Z,则其余部分从字母表的开头开始计算)。严谨地说,如果从 0 开始枚举字母表中的字母,则字符 x 的加密结果将是 \left(x + k\right) \bmod 26 26 个是拉丁字母表中的字母数)。

输入原始消息和加密密钥 k ,输出加密后的消息。

思路

遍历原始消息中的每一个字符 x 先变为 x - 65 ( 字符 AASCII 码为 65 ),得到 x 在字母表中的序号(从 0 开始数),再将 x - 65 加上 k ,并取余 26 ,变为 \left(x - 65 + k\right) \bmod 26 。最后加上 65 ,变回原来 ASCII 码中的字符。

代码

#include <bits/stdc++.h>
using namespace std;
char a[11];
int n,k;
int main()
{
    scanf("%s",&a);
    n=strlen(a);
    scanf("%d",&k);
    for(int i=0;i<n;i++) printf("%c",(a[i]-'A'+k)%26+'A');
        //这里的'A'(字符A)在ASCII码中对应65
    return 0;
}