여기에 주어진 숫자가 3의 배수인지 확인하는 프로그램을 작성해야 합니다.
일반 솔루션은 숫자의 모든 자릿수를 더하고 합계가 3의 배수이면 숫자를 3으로 나누어 떨어지지 않는 사소한 솔루션입니다. 그러나 이 솔루션은 가장 효율적인 솔루션이 아닙니다.
효율적인 솔루션은 숫자의 이진 표현에서 비트 수를 사용하는 것입니다. 홀수 위치의 설정 비트 수와 짝수 위치 설정 비트 수의 차이가 3의 배수이면 3의 배수입니다.
루프를 사용하여 숫자의 비트를 이동하고 짝수 및 홀수 위치인 비트 수를 계산합니다. 마지막으로 차이가 3의 배수인 경우 수표를 반환합니다.
구현을 이해하기 위해 예를 들어 보겠습니다.
입력
n =24
출력
<전>짝설명
이진 표현 =11000Evensetbits =1, oddsetbits =1.Difference =0, 나눌 수 있습니다.
솔루션 구현을 보여주는 프로그램,
예시
#include네임스페이스 std;int isDivisibleBy3(int n) { int oddBitCount =0; 정수 evenBitCount =0; if (n <0) n =-n; if (n ==0) 반환 1; if (n ==1) 반환 0; while (n) { if (n &1) oddBitCount++; if (n &2) evenBitCount++; n =n>> 2; } 반환 isDivisibleBy3(oddBitCount - evenBitCount);}int main() { int n =1241; cout<<"숫자 "< 출력
숫자 1241은 3의 배수가 아닙니다.