Problem D
Base -2
Input: Standard Input
Output: Standard Output
The creator of the universe works in mysterious ways. But |
Scott Adams
Everyone knows about base-2 (binary) integers and base-10 (decimal) integers, but what about base -2? An integer n written in base -2 is a sequence of digits (bi), writen right-to-left. Each of which is either 0 or 1 (no negative digits!), and the following equality must hold.
n = b0 + b1(-2) + b2(-2)2 + b3(-2)3 + ...
The cool thing is that every integer (including the negative ones) has a unique base--2 representation, with no minus sign required. Your task is to find this representation.
Input
The first line of input gives the number of cases, N (at most 10000). N test cases follow. Each one is a line containing a decimal integer in the range from -1,000,000,000 to 1,000,000,000.
Output
For each test case, output one line containing "Case #x:" followed by the same integer, written in base -2 with no leading zeros.
Sample Input Output for Sample Input
4 1 7 -2 0 |
Case #1: 1 Case #2: 11011 Case #3: 10 Case #4: 0 |
思路:就是进制转化。。注意取模的时候有出现-1的情况要变成1来处理。
代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
const int MAXN = 222222;
const int base = -2;
int T, n, MOD;
int out[MAXN], outn;
int main() {
int t = 0;
scanf("%d", &T);
while (T --) {
outn = 0;
scanf("%d", &n);
if (n == 0)
out[outn ++] = 0;
while (n) {
MOD = n % base;
if (MOD == -1)
MOD = 1;
n = (n - MOD) / base;
out[outn ++] = MOD;
}
printf("Case #%d: ", ++ t);
for (int i = outn - 1; i >= 0; i --)
printf("%d", out[i]);
printf("\n");
}
return 0;
}