1
Xs0ul 2015 年 6 月 6 日 via Android
看看十进制整数转换为二进制的算法
|
2
wbingeek 2015 年 6 月 6 日
除二取余
|
3
hpeng 2015 年 6 月 6 日 via Android
算二进制位数的1。位运算即可
|
4
bufannao OP 能给个算法么?
function count($num){ // $num = 13 …… return $result; // array[1,4,8] } |
5
zhjits 2015 年 6 月 6 日 via Android
|
8
ebony0319 2015 年 6 月 6 日 via Android
说错了,但是二楼是正解
|
9
wy315700 2015 年 6 月 6 日 $i = 1;
$result = array(); while($num){ if($num & 1){ $result[] = $i; } $i *= 2; $num /= 2; } |
10
zyue 2015 年 6 月 6 日
不就是转为二进制么
|
11
zhs227 2015 年 6 月 6 日 php有现成的函数转二进制。话说直接求代码真是个不好的方式,至少这个问题很简单。
function count_a($num) { $result = []; foreach (array_reverse(str_split(decbin($num))) as $k=>$v ) { if ($v) { $result[] = 1<<$k; } } return $result; // array[1,4,8] } |
12
SoloCompany 2015 年 6 月 6 日 via iPad toString(2)
|
13
b821025551b 2015 年 6 月 6 日
加号写成按位与也是醉了,我反应半天才反应过来
|
14
imn1 2015 年 6 月 6 日
换成二进制,看哪位有1就知道了
这是用整数作为权限表常见方法 |
15
bufannao OP |
17
Jaylee 2015 年 6 月 6 日
求子集
|
18
xff1874 2015 年 6 月 6 日
1 先排序
2 用贪婪算法 |
19
327beckham 2015 年 6 月 7 日
算法的话,加减乘除的速度有点慢了。用位运算的方式来弄吧。
|
20
msg7086 2015 年 6 月 7 日
发个ruby的好了
def bin n l = [] while n > 0 do m, n = n, n & (n-1); l << m - n end l end p bin 15 #-> [1, 2, 4, 8] |
21
msg7086 2015 年 6 月 7 日
或者写成one line的话
bin = -> (n) {Enumerator.new{|e| while n > 0 do m, n = n, n & (n-1); e.yield m - n end}.to_a} p bin.call 15 #-> [1, 2, 4, 8] |