1

如果 c 是大写字符的数值(即 B 是 66)并且为了论证,k 是 2 的键值?我是编程新手,不明白模数是如何工作的。我知道它需要余数的值,但是它不会像这样简化吗?

c = B = 66
k = 2
I imagine the result should be 'D'

(66 - 65 +2)%26 +65 
(3)%26 +65 
0 + 65 
65 = 'A'

我一定不明白 % 的工作方式。

4

3 回答 3

3

关键事实- 字母“A”的 ASCII 码是 65。

这是您的密码的工作方式 - 问题标题中的原始表达

  1. 取一个字母的 ASCII 值,从中减去“A”的值,得到一个从 0 开始的数字。
  2. 将键值添加到这个数字,按k位移动它。
  3. 现在将上面得到的数字除以 26,丢弃商并使用余数。这是模运算符%。这始终使您的数字保持在 0-25 范围内,因为除以 26 的余数永远不会大于 25。
  4. 添加 65 以将其转换为“加密的”大写字母。

这允许密钥是任何数字,并且仍然将“加密”输出保持在 AZ 的 ASCII 范围内。

您将%运算符解释为除法。实际上,它是取模或忘记商 - 我想要余数运算符。

例子

  1. 0%2是 0
  2. 1%2是 1
  3. 2%2是 0
  4. 3%2是 1

等等。模是循环的。

于 2015-10-03T00:47:14.953 回答
1

模数不是整数除法。模数为您提供除法的余数,因此 3 / 26 为 0,余数为 3。因此,3 % 26 为 3。

于 2015-10-03T00:39:31.507 回答
0

3 % 26 是 3,而不是 0。余数是模数。想想时钟上的模数 12。如果是 10 点,你加 4 小时,10 + 4 = 14。但是在时钟上,指针现在指向 2,而不是 14。无论你添加多少小时,指针总是指向一个数字从 1 到 12。这就是模数的工作原理。

10 + 4 = 14

14 % 12 = 2(14 除以 12 为 1,余数为 2)

10 + 100 = 110

110 % 12 = 4(110 除以 12 是余数 4)

如果现在是 10 点,而您等了 100 个小时,指针现在指向 4。

(使用除法的余数,除以 12 总是给出从 0 到 11 的数字,因此将 12 点钟视为 0 点钟。)

于 2015-12-14T19:16:44.127 回答