通常,我们通过将数字的2的幂分配给每个项,系数为
0
或1
,将数字分解为二进制数:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
0
and 的选择1
...不是很二进制。我们将通过以2的幂进行扩展,但系数为或来执行真正的二进制扩展:1
-1
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
现在,这个看起来二进制文件。
给定任何正数,看到以下内容应该是微不足道的:
- 每个奇数都有无限多个真实的二进制展开
- 每个偶数都没有真正的二进制扩展
因此,为了使真正的二进制扩展定义良好,我们要求扩展最小,即长度最短。
给定任何正整数n
,将返回其真正的二进制扩展,从最高有效数字到最低有效数字(或相反的顺序)。
规则:
- 因为这是 代码高尔夫球,您应力争以尽可能短的字节数进行此操作。允许内置。
- 任何可以表示和列出系数的输出都是可接受的:数组,带分隔符的系数字符串等。
- 适用标准高尔夫漏洞。
- 您的程序应能在您语言的标准整数大小范围内使用值。
测试用例
25 -> [1,1,1,-1,-1]
47 -> [1,1,-1,1,1,1]
1 -> [1]
3 -> [1,1]
1234567 -> [1,1,-1,-1,1,-1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,1]
0
而不是-1
低压状态,这不是我的错。接收这些位的调用方知道它们的含义。(这仍然是不平凡的位操作,因为旋转权仅在具有32个有效位的情况下才有效。例如,一个5位数字需要旋转宽度为5。)
111-1-1
有效的输出25
吗?