首页 新闻 搜索 专区 学院

一个小小的算法问题请教

0
悬赏园豆:10 [已关闭问题]

二进制      十进制
1             1
11           3
111         7
1111       15

15=1+2+4+8
7=1+2+4
9=1+8

现在问题是,给定一个数字,如何拆分成几个2的倍数之和?
我想要一个好的算法

 

yqpeng的主页 yqpeng | 初学一级 | 园豆:142
提问于:2010-06-13 11:28
< >
分享
其他回答(6)
0

不是转换为二进制然后对每个1进行处理么?

圳哥 | 园豆:225 (菜鸟二级) | 2010-06-13 11:54
0

先找与之最相近的2的倍数,求余后再继续找,直到余数为1...

天堂口 | 园豆:514 (小虾三级) | 2010-06-13 15:26
0
       function getdata (num)
        {
            if(num%2 == 0)
            {
                strnum+="0";
            }
            else
            {
                strnum+="1";
            }
            
            num = parseInt( num / 2 );
            
            if(num > 0)
            getdata(num);
        }

       function getdata (num)        {            if(num%2 == 0)            {                strnum+="0";            }            else            {                strnum+="1";            }                        num = parseInt( num / 2 );                        if(num > 0)            getdata(num);        }

先将数据值转换成二进制 (strnum)  

之后拆分这个strnum 然后存入一个数组中

最后循环这个数组

Math.pow(2,i);  

.zZ | 园豆:225 (菜鸟二级) | 2010-06-13 15:54
用一个循环,将这个树数与(&)上2的i次幂,每次与的结果就是一个数
支持(0) 反对(0) 代码工匠 | 园豆:219 (菜鸟二级) | 2010-06-13 17:10
0

IList<int> SomeMethod(int x)

        {          

            string str = string.Format("{0:x}",x);

            int numLength = str.Length * 4;

            IList<int> list = new List<int>();

            if (x == 0)

            {

                list.Add(0);

                return list;

            }

            int k = 1;

            if (x < 0)

            {

                x = -x;

                k = -1;

            }

 

            for(int i = 0;i<numLength;i++)

              {

                int midvalue=x&((int)(Math.Pow(2,i)));

              

                list.Add(midvalue*k);

               }

            while (list.Remove(0))

            {

            }

            return list;

        }

代码工匠 | 园豆:219 (菜鸟二级) | 2010-06-13 17:51
0

除2,从后排除所得的余数。

leonordo | 园豆:215 (菜鸟二级) | 2010-06-15 02:10
0

这个是不是什么面试题,怎么会有这么多人有类似的问题?

你看我之前回答过的一个一样的问题

http://space.cnblogs.com/question/14207/

eaglet | 园豆:17119 (专家六级) | 2010-06-15 07:30
0

我知道这能什么用 

可以用到数据压缩上面去 

不过我做的效果不好。

Dictionary | 园豆:215 (菜鸟二级) | 2012-01-21 00:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册