十进制转负n进制

给一个十进制数,转为-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;

}