#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