#D2148O. 负二进制转换

负二进制转换

【问题描述】

给出1个十进制整数N,计算出它的负二进制表示形式。

【输入】

第一行:一个整数N,表示要转换的十进制数。

【输出】

第一行:N的-2进制表示。

【输入样例】

-13

【输出样例】

110111

【数据规模】

100%的数据满足:|n|<=2000000000。

提示:

负二进制:

有这样一个数100110,它是-2进制的数,将它转换成10进制数的方法是

$1*(-2)^5 + 0*(-2)^4 + 0*(-2)^3 + 1*(-2)^2 + 1*(-2)^1 + 0*(-2)^0 =-30$。

110111转换为负二进制数为:

$1*(-2)^5 + 1*(-2)^4 + 0*(-2)^3 + 1*(-2)^2 + 1*(-2)^1 + 1*(-2)^0 =-13$

在-2进制数中,每个位置上的数字只能是0或1。可以证明,每一个10进制数都可以表示成-2进制数,而且表示方式是唯一的。

示例 1:

输入:2
输出:"110"
解释:(-2) ^ 2 + (-2) ^ 1 = 2

示例 2:

输入:3
输出:"111"
解释:(-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3

示例 3:

输入:4
输出:"100"
解释:(-2) ^ 2 = 4

和正常二进制数的计算一样,只不过二进制计算的时候是向下取整,负二进制是向上取整。

以6为例

二进制计算

6/2=3 余数 0
3/2=1 余数 1 (向下取整所以3/2=1)
1     余数 1  结果为 110;

负二进制计算

6/-2=-3 余数 0
-3/-2=2 余数 1(向上取整-3/-2=2)
2/-2=-1 余数 0
-1/-2=1 余数 1
1       余数 1 结果为 11010