轉化成-2進制的過程和轉化成2進制類似,唯一不一樣的是:如果余數為0,余數-=-2,商++。
另外n==0的情況要注意。
具體請看我的代碼:
#include<stdio.h>
int main()
{
/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
//*/
long test;
scanf("%ld",&test);
for(long k=1;k<=test;k++)
{
const long maxn=20007,base=-2;
long n,a[maxn],top;
scanf("%ld",&n);
top=0;
while(n!=0)
{
long r=n%base;
n/=base;
if(r<0)
{
r-=base;
n++;
}
top++;a[top]=r;
}
printf("Case #%ld: ",k);
if(top==0)
{
printf("%ld\n",0);
continue;
}
while(top>0)
{
printf("%ld",a[top]);top--;
}
putchar('\n');
}
return 0;
}
int main()
{
/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
//*/
long test;
scanf("%ld",&test);
for(long k=1;k<=test;k++)
{
const long maxn=20007,base=-2;
long n,a[maxn],top;
scanf("%ld",&n);
top=0;
while(n!=0)
{
long r=n%base;
n/=base;
if(r<0)
{
r-=base;
n++;
}
top++;a[top]=r;
}
printf("Case #%ld: ",k);
if(top==0)
{
printf("%ld\n",0);
continue;
}
while(top>0)
{
printf("%ld",a[top]);top--;
}
putchar('\n');
}
return 0;
}