ball ball you
字母环形加密(增强) (10分)将26个英文字母按顺时针方向排成一个圆环。密钥是一个整数。
具体加密方法如下:
若密钥 key≥0,则从明文字母开始按顺时针方向走 ∣key∣ 步得到密文字母;
若密钥 key<0,则从明文字母开始按逆时针方向走 ∣key∣ 步得到密文字母。
请编写函数,完成加密功能。
函数原型
char Encode(char plain, int key);
说明:参数 plain 为明文字符,key 为密钥(即步数)。若明文字符是字母,则函数值为对应的密文字母,大小写不变。若明文字符不是字母,则函数值不变。
裁判程序
#include <stdio.h>
#include <ctype.h>
char Encode(char plain, int key);
int main()
{
char x, y;
int k;
scanf("%c%d", &x, &k);
y = Encode(x, k);
printf("%c\n", y);
return 0;
}
/* 你提交的代码将被嵌在这里 */
输入格式
明文 密钥(任意整数)
输出格式
密文
输入样例1
x 5
输出样例1
c
输入样例2
B -3
输出样例2
Y
输入样例3
# 7
输出样例3
#
//以下是我的代码
char Encode(char plain, int key)
{
int i;
if(isalpha(plain)&&key>0)return plain+key;
else if(isalpha(plain)&&key<0)return plain-key;
else return plain;
}//无法输出 本帖最后由 jackz007 于 2021-1-7 12:13 编辑
char Encode(char plain , int key)
{
int k = key ;
char c = plain ;
if(key < 0) k = - k ;
k = k % 26 ;
if(k && (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')) {
if(key < 0) k = - k ;
c += k ;
if(k < 0 && (c > 'A' - 26 && c < 'A' || c > 'a' - 26 && c < 'a')) c += 26 ;
else if(k > 0 && (c > 'Z' && c < 'Z' + 26 || c > 'z' && c < 'z' + 26)) c -= 26 ;
}
return c ;
} char Encode(char plain, int key)
{
char letter;
letter = plain + key;
if (plain >= 'A' && plain <= 'Z') // 若输入的是大写字母
{
if (letter > 'Z') // 如果输入加上密钥大于字母Z
letter = letter - 'Z' + 'A' - 1; // 则让密文落入前面的大写字母
else if (letter < 'A') // 如果输入加上密钥小于字母A
letter = letter - 'A' + 'Z' + 1; // 则让密文落入后面的大写字母
}
else if(plain >= 'a' && plain <= 'z') // 若输入的是小写字母
{
if (letter > 'z') // 如果输入加上密钥大于字母z
letter = letter - 'z' + 'a' - 1; // 则让密文落入前面的小写字母
else if (letter < 'a') // 如果输入加上密钥小于字母a
letter = letter - 'a' + 'z' + 1; // 则让密文落入后面的小写字母
}
else // 若输入的不是英文字母
letter = plain; // 则原文输出
return letter;
}
页:
[1]