将整数拆分为2的幂次方

  任意一个正整数都可以用2的幂次方表示,例如:137=2^7+2^3+2^0,同时约定次方用括号来表示,即a^b=a(b)。由此可知,137可表 示:2(7)+2(3)+2(0)。进一步:7=2^2+2+2^0(2^1用2表示),3=2+2^0。所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)。
  注:2的1次用2表示,按2的次幂降次排序

  这个题目设计到递归、位运算,虽然代码很简单,但是思路还是值得思考一下。

#include <stdio.h>
int DG(int n)
    {
        int i,a[16],p=0;
        for (i=0;n>0;n>>=1,i++) 
             a[i]=n&1;
        for (i--;i>1;i--)
            if (a[i]&1)
            {
                if (p) printf("+");
                printf("2(");
                DG(i);
                printf(")");
                p=1;
             }
        if (a[1]&1){if (p) printf("+");printf("2");p=1;}
        if (a[0]&1){if (p) printf("+");printf("2(0)");}
        return 0;
    }
int main()
{
    int n;
    scanf("%d",&n);
    DG(n);
    return 0;
} 

 

posted @ 2013-04-14 01:10  简单地快乐  阅读(3647)  评论(0编辑  收藏  举报