1
Xs0ul Jun 6, 2015 via Android
看看十进制整数转换为二进制的算法
|
2
wbingeek Jun 6, 2015
除二取余
|
3
hpeng Jun 6, 2015 via Android
算二进制位数的1。位运算即可
|
4
bufannao OP 能给个算法么?
function count($num){ // $num = 13 …… return $result; // array[1,4,8] } |
5
zhjits Jun 6, 2015 via Android
|
8
ebony0319 Jun 6, 2015 via Android
说错了,但是二楼是正解
|
9
wy315700 Jun 6, 2015 $i = 1;
$result = array(); while($num){ if($num & 1){ $result[] = $i; } $i *= 2; $num /= 2; } |
10
zyue Jun 6, 2015
不就是转为二进制么
|
11
zhs227 Jun 6, 2015 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 Jun 6, 2015 via iPad toString(2)
|
13
b821025551b Jun 6, 2015
加号写成按位与也是醉了,我反应半天才反应过来
|
14
imn1 Jun 6, 2015
换成二进制,看哪位有1就知道了
这是用整数作为权限表常见方法 |
15
bufannao OP |
17
Jaylee Jun 6, 2015
求子集
|
18
xff1874 Jun 6, 2015
1 先排序
2 用贪婪算法 |
19
327beckham Jun 7, 2015
算法的话,加减乘除的速度有点慢了。用位运算的方式来弄吧。
|
20
msg7086 Jun 7, 2015
发个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 Jun 7, 2015
或者写成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] |