大前端

前端学习之家-大前端

“21天好习惯”第一期-6

今天来看看分享什么题目呢,

将26个英文字母按顺时针方向排成一个圆环。密钥是一个整数。

具体加密方法如下:

  • 若密钥 key≥0,则从明文字母开始按逆时针方向走 ∣key∣ 步得到密文字母;

  • 若密钥 key<0,则从明文字母开始按顺时针方向走 ∣key∣ 步得到密文字母。

请编写程序输入明文和密钥,输出密文。

 这是我们做到的第一个比较有意思的题目,题目要求给我们一个字符,一个数字,然后得到一新字符,那么我们会想,如果他给的密钥使得明文在运算后跳脱了a~z的这个范围怎么办,下面让我们来看看这个代码段

#include <stdio.h>
int main()
{
unsigned char d,b;
int k;
scanf("%c %d",&d,&k);
b = d - k % 26;
b = b >'z'?b-26:b;
b = b<'a'?b+26:b;
printf("%c",b);
return 0;
}

这里巧妙的运用了%运算,%表示取余数,例如5%2得到的是余数1,这样就避免了b数值过大或者过小这个问题,这使得b保持在a-26~z+26之间,这能使后面通过一个+-26保证b在合理范围内。

还有就是这里涉及到了一个三元运算符

它是如何理解的呢

比如

a=b>c?b:c;

可以理解成若b>c,a=b;若b>c不成立,则a=c

发表评论:

Copyright Your WebSite.Some Rights Reserved.