题目
学习信息学的人都熟悉二进制,但又没有人想过负二进制!那样的数字就不需要符号了!
二进制从低位到高位,即从右向左的位权是1,2,4,8,16……
负二进制的从右向左的位权当然就是1,-2,4,-8,16……
负二进制是可以表示任何整数的。如:
1,11.,111,100,101,11010,11011,11000,11001……
表示1,2,3,4,5,6,7,8,9……
而11,10,1101,1100,1111……
则表示-1,-2,-3,-4,-5……
现在给你一个十进制的整数n,请求出它的负二进制数。
输入样例:
-13
输出样例:
110111
样例解释:
从右向左:1*1+1*(-2)+1*4+0*(-8)+1*16+1*(-32)=-13
数据范围:
-2,000,000,000<=n<=2,000,000,000
题解
模拟,另一方法见
洛谷1017进制转换题解
代码
var
n,i,k:longint;
s:string;
a:array[1..10000]of longint;
begin
readln(n);
repeat
inc(k);
a[k]:=abs(n mod 2);
n:=-trunc((n-a[k])/2);
until n=0;
for i:=k downto 1 do
write(a[i]);
writeln;
end.