UVa 11121 - Base -2
传送门
题意
给出一个十进制数,转换为-2进制。
思路
因为可能出现余数为-1,所以求余数的时候要这样。
\(ans[k++] = (num % 2 + 2) % 2\)
\(num = (num - ans[k - 1]) / base\)
然后去掉前导0。
代码
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int base = -2;
int main()
{
//freopen("input.txt", "r", stdin);
int T, i, j, n, cases = 0;
scanf("%d", &T);
while (T--)
{
int ans[100], k = 0;
memset(ans, 0, sizeof ans);
scanf("%d", &n);
while (n)
{
ans[k++] = (n % 2 + 2) % 2;
n = (n - ans[k - 1]) / base;
}
for (i = k; i > 0; i--)
if (ans[i])
break;
printf("Case #%d: ", ++cases);
while (i >= 0)
printf("%d", ans[i--]);
printf("\n");
}
return 0;
}