#include <stdio.h> #include <math.h> int change(int test); /* 判定函数 测试TEST */ int fun(int num); /* 判断NUM中可以找到最大的2^n 返回n */ int nn(int n); /* 返回2^n的大小 */ void main() { int n=0; scanf("%d",&n); while(n) { change(n); printf("\n"); scanf("%d",&n); } } int nn(int n) { int i,sum=1; for(i=0;i<n;i++) sum=sum*2; return sum; } int fun(int num) { int i=0; if(num<2) { return 0; } else i++; return i+fun((int)(num/2)); } int change(int test) { int n; if(test==2) { printf("2"); } else if(test==1) { printf("2(0)"); } else if(test==3) { printf("2+2(0)"); } else if(test>3) { printf("2("); n=fun(test); /* 根据N的大小用函数求出2(N)的N的展开情况 重复调用CHANGE 函数 */ change(n); /* 调用自身 */ printf(")"); if(test-nn(n)>0) { printf("+"); /* 如果TEST 在经过一次展开之后余下部分仍然大于0 那么输出一个“+”号 */ change(test-nn(n)); /* 并且将剩下的部分继续用此函数展开 */ } } return 1; /* 正常结束返回1 */ }

评论