이 문제에서는 두 개의 정수 값과 b가 제공됩니다. 그리고 우리의 임무는 비트 단위 및 (&) 범위에서 b까지를 찾는 것입니다. . 이것은 우리가 &a+1 &a+2 &… b-1 &b의 값을 찾아야 한다는 것을 의미합니다.
문제를 이해하기 위해 예를 들어보겠습니다.
입력 - a =3, b =8
출력 - 0
설명 − 3 &4 &5 &6 &7 &8 =0
이 문제를 해결하기 위해 간단한 해법은 에서 시작하여 1을 b로 증가시켜 모든 숫자의 비트를 찾는 것입니다.
더 효과적인 솔루션
이것은 보다 효과적인 솔루션이며 −
를 사용하여 수행할 수 있습니다.1단계 - b의 LSB를 뒤집습니다.
2단계 − 숫자와 b를 비교하여 범위 내에 있는지 확인,
2.1단계 - 숫자가 플립보다 크면 LSB 이득입니다.
2.2단계 - 그 다음 숫자보다 크지 않은 경우 =결과입니다.
이제 자 의 작업에서 위의 알고리즘을 참조하십시오 -
예 - a =3 및 b =8.
해결책 -
1단계 − b =8(1000), 숫자에서 유일한 LSB를 뒤집습니다. 숫자는 0000 즉 0이 됩니다.
2단계 - 0은 3보다 작고, 0은 결과입니다.
예시
이제 문제를 해결하는 코드를 살펴보겠습니다.
#include <stdio.h> int main(){ long a, b; a = 3; b = 8; do{ b -= (b & -b); }while(a < b); printf("%li", b); }
출력
0