zoukankan      html  css  js  c++  java
  • 将整数拆分为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;
    } 
  • 相关阅读:
    latex
    anaconda
    git stash
    YOLO训练Pedestrain
    OpenCL C
    OpenCL
    OpenVX
    caffe源码阅读
    居住证积分查询地址
    jdk 1.8内存逐步增大的一个bug
  • 原文地址:https://www.cnblogs.com/wangaohui/p/3019723.html
Copyright © 2011-2022 走看看