函数题:字母环形解密(函数)
将26个英文字母按顺时针方向排成一个圆环。密钥是一个整数。

具体加密方法如下:
- 若密钥 $$key \geq 0$$,则从明文字母开始按顺时针方向走 $$| key |$$ 步得到密文字母;
- 若密钥 $$key \lt 0 $$,则从明文字母开始按逆时针方向走 $$| key |$$ 步得到密文字母。
请编写函数,完成解密功能。
#### 函数原型
c
char Decode(char secret, int key);
说明:参数 secret 为密文字符,key 为密钥(即步数),函数值为明文字符。
#### 裁判程序
c
#include <stdio.h>
#include <stdlib.h>
char Decode(char secret, int key);
int main()
{
char x, y;
int k;
scanf("%c%d", &x, &k);
y = Decode(x, k);
printf("%c\n", y);
return 0;
}
/* 你提交的代码将被嵌在这里 */
#### 输入格式
> 密文(小写字母) 密钥(任意整数)
#### 输出格式
> 明文(小写字母)
#### 输入样例1
in
f 5
#### 输出样例1
out
a
#### 输入样例2
in
y -3
#### 输出样例2
out
b
答案:若无答案欢迎评论
1. 将密文字母减去首字母,变成字母的序号 (0 ~ 25)
c
secret - 'a'
2. 密钥为 -key,绝对值可能很大,为避免溢出,应先取模 (-25 ~ 25)
c
-key % 26
3. 结果可能为负数,再加26,可确保为正数 (0 ~ 25)
c
(-key % 26 + 26) % 26
4. 将字母序号加上密钥,再取模,得到明文字母的序号 (0 ~ 25)
c
(secret - 'a' + (-key % 26 + 26) % 26) % 26
化简,得
c
(secret - 'a' - key % 26 + 26) % 26
5. 将字母序号加首字母,再变成对应的字母
c
(secret - 'a' - key % 26 + 26) % 26 + 'a'
参考答案
c
char Decode(char secret, int key)
{
return (secret - 'a' - key % 26 + 26) % 26 + 'a';
}

具体加密方法如下:
- 若密钥 $$key \geq 0$$,则从明文字母开始按顺时针方向走 $$| key |$$ 步得到密文字母;
- 若密钥 $$key \lt 0 $$,则从明文字母开始按逆时针方向走 $$| key |$$ 步得到密文字母。
请编写函数,完成解密功能。
#### 函数原型
c
char Decode(char secret, int key);
说明:参数 secret 为密文字符,key 为密钥(即步数),函数值为明文字符。
#### 裁判程序
c
#include <stdio.h>
#include <stdlib.h>
char Decode(char secret, int key);
int main()
{
char x, y;
int k;
scanf("%c%d", &x, &k);
y = Decode(x, k);
printf("%c\n", y);
return 0;
}
/* 你提交的代码将被嵌在这里 */
#### 输入格式
> 密文(小写字母) 密钥(任意整数)
#### 输出格式
> 明文(小写字母)
#### 输入样例1
in
f 5
#### 输出样例1
out
a
#### 输入样例2
in
y -3
#### 输出样例2
out
b
答案:若无答案欢迎评论
1. 将密文字母减去首字母,变成字母的序号 (0 ~ 25)
c
secret - 'a'
2. 密钥为 -key,绝对值可能很大,为避免溢出,应先取模 (-25 ~ 25)
c
-key % 26
3. 结果可能为负数,再加26,可确保为正数 (0 ~ 25)
c
(-key % 26 + 26) % 26
4. 将字母序号加上密钥,再取模,得到明文字母的序号 (0 ~ 25)
c
(secret - 'a' + (-key % 26 + 26) % 26) % 26
化简,得
c
(secret - 'a' - key % 26 + 26) % 26
5. 将字母序号加首字母,再变成对应的字母
c
(secret - 'a' - key % 26 + 26) % 26 + 'a'
参考答案
c
char Decode(char secret, int key)
{
return (secret - 'a' - key % 26 + 26) % 26 + 'a';
}