
负数需要先置反为反码,然后再加1,并且循环需要32位
floor()舍去法取整
ceil – 进一法取整
round – 对浮点数进行四舍五入
%取余数
array_count_values()表示$v出现次数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
function ($n){ $arr = array(); if ($n > 0){ while($n != 0) { $temp = $n % 2; $n = floor($n/2); array_push($arr,$temp); } $judge = array_count_values($arr); if(isset($judge[1])){ return $judge[1]; }else{ return 0; } }else{ $n = -1 * $n; while($n > 0){ $temp = $n % 2; $n = floor($n/2); array_push($arr,$temp); } for($i=0;$i < 32;$i++){ if($arr[$i] == 1){ $arr[$i] = 0; }elseif($arr[$i] == 0) { $arr[$i] = 1; }else{ $arr[$i] = 1; } } $length = count($arr); for($i = 0;$i < $length;$i++){ if($arr[$i]==0){ $arr[$i] = 1; break; }else{ $arr[$i] = 0; } } $judge = array_count_values($arr); if(isset($judge[1])){ return $judge[1]; }else{ return 0; } } } ?>
|
近期评论