正文

stu(1162)2005-08-30 20:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/elva6401/4274.html

分享到:

#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 */
}

阅读(2267) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册