天马行空VIP 发表于 2016-3-25 23:24:30

SLE15课后题

本帖最后由 天马行空VIP 于 2016-3-27 16:19 编辑

#include <stdio.h>

int main()
{
      int ch;

      printf("请输入明文:");

      while ((ch = getchar()) != '\n')
      {
                if (ch >= 'a' && ch <= 'z')
                {
                        putchar('a' + (ch - 'a' + 3) % 26);//这句话不懂,求解释 。
                        continue;
            }

                if (ch >= 'A' && ch <= 'Z')
                {
                        putchar('A' + (ch - 'A' + 3) % 26);
                        continue;
                }

                putchar(ch);
      }

      putchar('\n');

      return 0;
}

muyu0096 发表于 2016-3-26 18:31:53

凯撒密码问题。即密文是输入的明文的后面第3个字母。
注意点是对于x,y,z三个字母,转换后是a,b,c,因此不能简单的直接+3,也就是到末尾要循环到头部。
表达式就是解决这个问题的

天马行空VIP 发表于 2016-3-26 22:42:16

muyu0096 发表于 2016-3-26 18:31
凯撒密码问题。即密文是输入的明文的后面第3个字母。
注意点是对于x,y,z三个字母,转换后是a,b,c,因 ...

我不太懂这句话是怎么实现向后移三位的,尤其是%26

muyu0096 发表于 2016-3-26 23:15:39

ASCII码你总要知道啊,这是理解这个的基础知识,如果不知道,你百度下,很多讲的。

小甲鱼 发表于 2016-3-27 15:48:30

天马行空VIP 发表于 2016-3-26 22:42
我不太懂这句话是怎么实现向后移三位的,尤其是%26

其实是一个小小的数学技巧,理解这类技巧的方法很简单:代几个数进去尝试,你就会慢慢理解是咋回事了。

PS:S1E15,是 1,第一季的意思,不是 L~~~~~

天马行空VIP 发表于 2016-3-27 16:18:15

谢谢大家

atmo 发表于 2016-3-27 19:14:00

学习了.
页: [1]
查看完整版本: SLE15课后题