题意:给出一个十进制的数字,输出他的-2进制数。

题解:-2进制与2进制的区别是在奇数位会减去这个数字而不是像2进制一样加上这个数,所以需要将当前余数和后面一位的余数更改来填补前一位的增加或减少。

#include <stdio.h>
#include <string.h>
const int N = 100;
int n, res[N];

int main() {
	int t, cas = 1;
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		memset(res, 0, sizeof(res));
		int k = 0;
		while (n != 0) {
			res[k++] = n % -2;
			n /= -2;
		}
		for (int i = 0; i < N; i++) {
			if (res[i] == -1) {
				res[i] = 1;
				res[i + 1]++;
			}
			if (res[i] == 2) {
				res[i] = 0;
				res[i + 1]--;
			}
			if (res[i] == -2) {
				res[i] = 0;
				res[i + 1]++;
			}
		}
		int i;
		printf("Case #%d: ", cas++);
		for (i = N - 1; i >= 0; i--) {
			if (res[i] != 0)
				break;
		}
		if (i == -1)
			printf("0");
		for (; i >= 0; i--)
			printf("%d", res[i]);
		printf("\n");
	}
	return 0;
}