计算机以二进制形式存在。所有程序员都知道二进制。
但是2**x
,尽管它们与二进制文件有着良好的联系,但它们经常被忽略为不实用的。
为了向您展示这种美丽关系的一个例子,我将为19作见证。
19 10011 103 23 13 j
19是十进制数,为清楚起见包括在内。
10011是19的二进制文件。
103,以二进制方式从基数开始以这种方式制作:
- log2(4)== 2,让我们记住两个。
- 填充10011,使其长度为2的倍数-> 010011
从左至右取数字2乘2,并将其视为2位数的二进制数:
- 01-> 1
- 00-> 0
- 11-> 3
完成在,10011碱-4是103。
对于基数8,执行与log2(8)= 3相同的操作,但三乘三。
- 垫子010011
- 010-> 2
011-> 3
23,完成。
对于基数16,请执行与log2(16)= 4相同的操作,但4乘4。
- 垫00010011
- 0001-> 1
0011-> 3
13,完成。
任务
给定一个最大数字作为输入,您将输出一个表
base-ten-i base-two-i base-four-i base-eight-i base-sixteen-i base-thirtytwo-i
因为我从0到n(含)。二进制数是工作所需的绝对最小值的缩影,因此您的代码应尽可能短。
限制和奖金
Base-ten->二进制和Binary-> Base-ten内置插件被视为漏洞,就像Base-a-> Base-b一样。
如果
2**i
通过使用上述关系生成所有(对于i> 2)基数,则将获得*0.6
奖励,但允许进行常规基数转换(由您自己编写)。
示例表
> 32
0 0 0 0 0 0
1 1 1 1 1 1
2 10 2 2 2 2
3 11 3 3 3 3
4 100 10 4 4 4
5 101 11 5 5 5
6 110 12 6 6 6
7 111 13 7 7 7
8 1000 20 10 8 8
9 1001 21 11 9 9
10 1010 22 12 a a
11 1011 23 13 b b
12 1100 30 14 c c
13 1101 31 15 d d
14 1110 32 16 e e
15 1111 33 17 f f
16 10000 100 20 10 g
17 10001 101 21 11 h
18 10010 102 22 12 i
19 10011 103 23 13 j
20 10100 110 24 14 k
21 10101 111 25 15 l
22 10110 112 26 16 m
23 10111 113 27 17 n
24 11000 120 30 18 o
25 11001 121 31 19 p
26 11010 122 32 1a q
27 11011 123 33 1b r
28 11100 130 34 1c s
29 11101 131 35 1d t
30 11110 132 36 1e u
31 11111 133 37 1f v
32 100000 200 40 20 10
4
由于“您必须使用上述关系生成所有2 ** i(对于i> 2)个基数”,因此被否决。要求特定的算法可以消除很多使代码有趣的东西。您可以禁止内置的基本转换函数,同时仍然允许选择算法。
—
xnor
@xnor现在使用我的方法只会给高尔夫球手带来更多的自由
—
Caridorc
我也不喜欢奖金。它有效地意味着您必须使用内置算法或算法,并且没有其他算法可行。
—
xnor 2015年
不允许使用@xnor内置。通用转换器会更短一些,所以如果您使用我自己的转换规则,我会给您带来额外的好处
—
Caridorc