0%

《程序员升职记》11.四十倍放大器

本楼层需要将输入的数放大四十倍输出.


放大四十倍可以看做放大32倍和放大8倍的和,解决步骤如下:

  1. 把输入复制到0位置处
  2. 把手上的数加上0位置处的数,加完放回0位置(此时已放大2倍)
  3. 把手上的数加上0位置处的数,加完放回0位置(此时已放大4倍)
  4. 把手上的数加上0位置处的数,加完放入1位置(此时1位置处是原来的8倍, 0位置处是原来的4倍)
  5. 把手上的数加上1位置处的数,加完放回0位置(此时0位置是原来的16倍,1位置是原来的8倍)
  6. 把手上的数加上0位置处的数,不要放回0位置(此时手上的已经是32倍)
  7. 加上1位置的数,并输出
  8. 重复0-7过程
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    -- HUMAN RESOURCE MACHINE PROGRAM --

    a:
    INBOX
    COPYTO 0
    ADD 0
    COPYTO 0
    ADD 0
    COPYTO 0
    ADD 0
    COPYTO 1
    ADD 1
    COPYTO 0
    ADD 0
    ADD 1
    OUTBOX
    JUMP a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a:
INBOX
COPYTO 0
COPYTO 1
ADD 1
COPYTO 1
ADD 1
ADD 0
COPYTO 0
ADD 0
COPYTO 0
ADD 0
COPYTO 0
ADD 0
OUTBOX
JUMP a