Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 주어진 범위의 숫자 범위의 비트 AND를 찾는 프로그램

<시간/>

두 개의 값 시작과 끝이 있다고 가정하고 [시작, 끝] 범위(둘 다 포함)에 있는 모든 숫자의 비트 AND를 찾아야 합니다.

따라서 입력이 start =8 end =12와 같으면 출력은 8이 2진수로 1000이고 12가 2진수로 1100이므로 1000 AND 1001 AND 1010 AND 1011 AND 1100은 1000, 즉 8이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n :=끝 - 시작 + 1
  • x :=0
  • 31~0 범위의 b에 대해 1 감소, do
    • 2^b
    • 루프에서 나오다
  • 2^b AND 시작과 끝이 0이 아니면
    • x :=x + (2^b)
  • 반환 x
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    def solve(start, end):
       n = end - start + 1
       x = 0
       for b in range(31, -1, -1):
          if (1 << b) < n:
             break
          if (1 << b) & start & end:
             x += 1 << b
       return x
    
    start = 8
    end = 12
    print(solve(start, end))

    입력

    8, 12

    출력

    8