例子:-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); }