2 진법 0 과 1 을 찾 습 니 다.
3931 단어 알고리즘 사고
int n=0;
cin>>n;
int count=0;
while(n)
{
n=n&(n-1);// 1
count++;
}
cout<<count<return 0;
0 의 개 수 를 찾 는 방법 에 대해 서 는 많은 지면 을 써 서 이야기 하 겠 습 니 다.일반적으로 이 진수 에서 0 의 개 수 를 찾 습 니 다. 이 0 의 개 수 는 맨 왼쪽 첫 번 째 1 의 자리 부터 오른쪽으로 세 는 개수 입 니 다. 예 를 들 어 10 진법 8 - > (1000) 2 에 3 개의 0 이 있 으 면 0 을 찾 은 개 수 는 당연히 오른쪽 연산 으로 만 계산 할 수 있 습 니 다. 그러나 주의해 야 할 것 은 입력 수가 마이너스 라면 가장 높 은 위 치 를 기호 로 1 (예 를 들 어 - 8 - – > > > >) 로 설정 하 는 것 입 니 다.(1000.0000.0000.1000)2)이때 오른쪽 이동 연산 은 기호 위 치 를 수정 하지 않 습 니 다. 기호 위 치 는 계속 1 이 되 기 때문에 주의 하지 않 으 면 순환 이 생 길 수 있 습 니 다. 여기 서 우 리 는 오른쪽 에서 세 는 마지막 1 의 왼쪽 0 은 우리 가 통계 하고 자 하 는 0 이 아니 기 때문에 우 리 는 먼저 이 숫자 가 마이너스 인지 아 닌 지 를 판단 할 수 있 습 니 다. 마지막 으로 정 수 를 바탕 으로 통 계 를 하면 순환 이 나타 나 지 않 습 니 다. 다음은 코드 코드 입 니 다.
int n=0;
cin>>n;
if(n==0) return 1;
if(n<0) n=-n;
int count=0;
while(n)
{
if((n&0x01) == 0)
{
count++;
}
n=n>>1;
}
cout<<count<return 0;
자, 코드 를 한 단락 더 붙 여 주세요.
int n=0;
cin>>n;//n=1024
if(n==0) return 1;
int count=0;
while(~n)//while(n+1)
{
n=n|(n+1);
count++;
}
cout<<count<return 0;
count 의 최종 결 과 는 얼마 입 니까? 답 은 31 입 니 다. 순환 의 기능 은 어떤 역할 을 합 니까? 예 를 들 어 알 수 있 듯 이 0 을 통계 해 야 하 는 개수 입 니 다. 그러나 그 는 int 유형 중 전체 0 의 수 를 통계 하 는 것 입 니 다. 신기 하지 않 습 니까? 원 리 는 사실 비트 연산 입 니 다. 다음 에 우 리 는 간단 한 예 로 설명 합 니 다. 만약 에 우리 가 한 유형 이 반 글자 밖 에 없다 고 가정 합 니 다.절의 크기 는 4 자리 이 며, 모두 1 을 설정 한 후 종료 하면 프로그램 논리 에 따라 순환 이 종 료 됩 니 다. 초기 n = 8 - > (1000) 2 차 연산 후 n = (1000) | (1001) n = 1001 = 9 count = 1 ~ n = 0110 n + 1 = 1010 2 차 연산 후 n = (1001) n = 1011 = 11 count = 2 ~ n = 0100 n + 1 = 1100 3 차 연산 후 n = (1011) | (1100)n = 111 = 16 count = 3 ~ n = 0, 종료 순환 n + 1 = 1.0000 / / 넘 침
순서대로 연산 할 때마다 맨 오른쪽 에 있 는 0 을 1 로 설정 하고 마지막 에 이 유형의 모든 것 이 1 이라는 것 을 알 수 있 습 니 다. 이때 1 을 더 하면 넘 칩 니 다. 따라서 위의 코드 는 입력 수의 바 이 너 리 표현 에서 이 유형의 0 개 수 를 통계 할 수 있 습 니 다. 갑자기 비트 연산 이 기묘 하 다 고 생각 하지 않 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
51nod 1448 2 염색 문제 (아이디어 문제, 좋 은 문제)제목 링크 1448 이염 색 문제 제목: TopCoder 기준 시간 제한: 1 초 공간 제한: 131072 KB 값: 40 난이도: 4 단계 알고리즘 문제 몇 번 의 조작 을 통 해 격자 를 초기 상태 에서 패턴...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.