给一个十进制数,转为-2进制数
例如-13;
1*1 + 1*-2 + 1*4 + 0*-8 +1*16 + 1*-32 = -13
所以答案是
110111
这个和二进制一样的,二进制是第一位标识正负,00000001 表示1 10000001 表示-1
你把前面的第一个正负标志位换一下,就可以了
#include<stdio.h>
void compute(int x) {
if(x == -2) {
printf("10");
} else if(x == -1) {
printf("11");
} else if(x == 0) {
printf("0");
} else if(x == 1) {
printf("1");
} else {
int r = x % 4;
int d = x / 4;
if(r == 2 || r == 3) {
d++;
r -= 4;
} else if(r == -2 || r == -3) {
d--;
r += 4;
}
compute(d);
if(r == -2) {
printf("10");
} else if(r == -1) {
printf("11");
} else if(r == 0) {
printf("00");
} else if(r == 1) {
printf("01");
}
}
}
int main(void) {
int n;
scanf("%d", &n);
compute(n);
printf("\n");
return 0;
}
#include
using namespace std;
#define N 10000
int main(){
int n,j;
int x[N],i=0;
scanf("%d",&n);
if(n==0){
printf("0");
}else{
while(n!=0){
if(n>0){
x[i]=n-n/(-2)*(-2);
i++;
n=n/(-2);
}if(n<0){
x[i]=n-(n-1)/(-2)*(-2);
i++;
n=(n-1)/(-2);
}
}
for(j=i-1;j>=0;j--){
printf("%d",x[j]);
}
}
return 0;
}