将一个十进制转化为-2进制的数。同样求余数,当n%-2<0时,所得余数m应 m -= base; (base=-2),替代后减少的那部分值需要加回来,即:所得商+1。
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
int main()
{
#ifdef test
freopen("sample.txt", "r", stdin);
#endif
int t, n, bi, cct=0;
char binary[1000];
scanf("%d", &t);
while(t--)
{
int len = 0;
scanf("%d", &n);
printf("Case #%d: ", ++cct);
if(!n)
printf("0");
while(n)
{
bi = n%-2;
binary[len] = bi;
n /= -2;
if(bi<0)
{
binary[len] += 2;// 小于0时减去相应负进制数
++n; // 补1
}
++len;
}
while(len--)
printf("%d", binary[len]);
puts("");
}
return 0;
}