>  기사  >  백엔드 개발  >  PHP 면접 질문 ('1'의 개수를 2진수로 변환한 후 10진수로 계산)

PHP 면접 질문 ('1'의 개수를 2진수로 변환한 후 10진수로 계산)

WBOY
WBOY원래의
2016-08-08 09:22:42973검색



어제 면접에서 만난 면접질문입니다.

얼핏 보면 단순해 보이지만, 세부적으로는 실현될 수 없습니다.

집에 와서 바이두에서 검색해서 답을 찾았어요.

은 다음과 같습니다.

//计算一个十进制数转换为二进制数中‘1’的个数
 //例如十进制11 = 二进制1011,则结果是3个1
 
    //解题思路:利用 n & (n - 1) 可以将最后一个1变0
   //xxxx1000 & (xxxx1000 - 1) = xxxx1000 & xxxx0111 = xxxx0000
   // 1011 & (1011 - 1) = 1011 & 1010 = 1010
   //直到最后一个1被与为0,得出结果
 function count1($n) {
        $r = 0;
        while ($n != 0) {
             $r++;
             $n &= ($n - 1);
         }
 
        return $r;
    }
 
     echo count1(11); 

읽어보니 이해하기 쉽지 않다는 생각이 들었습니다(저는 비트 연산을 잘 못합니다...)

잠시 생각해 본 결과 다음과 같은 해결책이 있습니다.

function count1($n) {
   $r = 0; 
	while($n !=0)
	{ 	
		
		if(($n%2) !=0 )
		{
			$r++;
		}
         $n=$n/2;
    }
	
	return $r;
}
    echo count1(8);

이 방법이 훨씬 이해하기 쉬울 것입니다.


위에는 PHP 면접 질문('1'의 개수를 바이너리로 변환한 후 소수로 계산)을 소개하고 관련 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.