10进制转化为-2进制

    xiaoxiao2021-12-10  19

    例子:-13 =  1*1 +1*-2+1*4+0*8+1*16+1*-32   -2进制为110111

    输入-13

    输出:110111

    代码: 只会用递归写,想不出什么好办法。

    #include<stdio.h> #include<stdlib.h> #include<math.h> int calresult(int *a, int start, int end,int data,int sum) { if(data == 0) return 1; if(sum == 0)return 0; int i; for(i = start;i<end;i++) { int key = pow(-2,end-i-1); a[i] = 1; int result = calresult(a,i+1,end,data-key,sum-1); if(result == 1) return result; a[i] = 0; } return 0; } char *tentofu2(int n,int *num) { int a[32] = {0}; int i; for(i=0;i<=32;i++) { int result = calresult(a,0,32,n,i); if(result == 1) { break; } } char *p = malloc(sizeof(char) * 33); int j  =0; i = 0; while(a[i] == 0&&i<32) i++; if(i == 32) { p[j++] = '0' + (a[i-1] -0); p[j] = '\0'; } else  { while(i<32) { p[j++] = '0' + (a[i++] -0); } } *num = j; return p; } int main() { int n; scanf("%d",&n); int num; char *p = tentofu2(n,&num); int i; for(i = 0;i<=num;i++) { printf("%c",p[i]); } printf("\n"); free(p); }

    转载请注明原文地址: https://ju.6miu.com/read-700256.html

    最新回复(0)