Problem B 字符循环加密
题目描述
编写函数Encryption,实现对字母ch循环加密,要求其原型为:
仅需提交题目所要求的函数原型对应的函数定义源代码,不可提交测试用main函数及其它代码,否则会出现编译错误。
char Encryption(char ch, int k);
其中:形参ch为待加密字母。形参k为字母加密偏移量。返回加密后的字母。
加密算法为:如果ch为字母,则在由A-Z或a-z顺序构成的环形结构中,将字母ch循环右移k个字母,得到加密后的字母并将加密结果返回。若ch为其它字符,则不做任何变换,直接返回字母ch。对待加密字母需要区分大小写。
提示:例如,'a'右移3个字母则加密结果为'd','x'右移3个字母则加密结果为'a'。可以通过将字母的ASCII值加偏移量后与26求余运算实现该操作。
#include<stdio.h>
char Encryption(char ch, int k);
char Encryption(char ch, int k){
if(k>=26)
k=k%26;
if((ch>='a' && ch<='z') || (ch>='A' && ch <='Z')){
ch=ch+k;
if(ch>'z')
ch=ch-'z'-1+'a';
if(ch > 'Z' && ch < 'a')
ch=ch-'Z'-1+'A';
if((ch >= 'a' && ch <= 'z') || (ch>='A' && ch<='Z'))
ch=ch;
}
else ch=ch;
return ch;
}
int main(){
char sh;
int k;
scanf("%c%d",&sh,&k);
printf("%c",Encryption(sh,k));
}
追更:
上面的代码或许是错误的,因为我这个蒟蒻才发现,ASCII码也就是字符型一超过127就无法运算,所以ch=ch+k;或许ch会超过127;所以我们重新定义一个整型变量,利用int类型进行运算,最后再转为int型就可以了。看最终题解:
#include<stdio.h>
char Encryption(char ch, int k);
int sh;
char Encryption(char ch, int k){
if(k>=26)
k=k%26;
if((ch>='a' && ch<='z') || (ch>='A' && ch <='Z')){
sh=(int)ch+k;
if(sh>122){
sh=(int)sh-122-1+97;
ch=(char)sh;
}
if(sh > 'Z' && sh < 'a')
ch=sh-'Z'-1+'A';
if((sh >= 'a' && sh <= 'z') || (sh >='A' && sh <='Z'))
ch=sh;
}
else ch=ch;
return ch;
}
over