UVA_11121
将题目描述给的式子逆着推回去即可,同时要注意模运算有可能得到负数,但bi都是正的,这个时候+2再取次模即可。
#include<stdio.h>
#include<string.h>
int a[50];
void solve()
{
int i, n;
scanf("%d", &n);
memset(a, 0, sizeof(a));
for(i = 0; i < 40; i ++)
{
a[i] = (n % 2 + 2) % 2;
n = (n - a[i]) / (-2);
}
for(i = 40; i; i --)
if(a[i])
break;
for(; i >= 0; i --)
printf("%d", a[i]);
printf("\n");
}
int main()
{
int t, tt;
scanf("%d", &t);
for(tt = 0; tt < t; tt ++)
{
printf("Case #%d: ", tt + 1);
solve();
}
return 0;
}