어제 내 아이와 놀면서 장난감 기차에서 숫자를 보았습니다.
따라서 우리는 4 − 2 − 8 − 1 또는 2 2 − 2 1 − 2 3 − 2 0 으로 나눌 수있는
그래서 간단한 도전 : 음수가 아닌 숫자를 입력으로 받으면 숫자의 문자열 표현 (기본 10과 선행 0 없음)을 2의 거듭 제곱으로 나눌 수 있는지 여부를 나타내는 일관된 진실성과 거짓 값을 반환합니다. .
예 :
4281 truthy (4-2-8-1)
164 truthy (16-4 or 1-64)
8192 truthy (the number itself is a power of 2)
81024 truthy (8-1024 or 8-1-02-4)
101 truthy (1-01)
0 falsey (0 cannot be represented as 2^x for any x)
1 truthy
3 falsey
234789 falsey
256323 falsey (we have 256 and 32 but then 3)
8132 truthy (8-1-32)
Tests for very large numbers (not really necessary to be handled by your code):
81024256641116 truthy (8-1024-256-64-1-1-16)
64512819237913 falsey
이것은 code-golf 이므로 각 언어마다 가장 짧은 코드가 이길 수 있습니다!
101
(0 때문에 거짓) ... 또는 여전히 그렇 1 - 01
습니까 ( )?
101
현재 답변으로 사례를 테스트 해 왔으며 모두 2의 거듭 제곱으로 true
나눌 수 있기 때문에 모두 돌아 1-01
왔다. 그래서 나는 그 경우가 진실하다고 생각할 것이다.
log2(n)
쉼표 뒤에 10 진수가 포함되어 있지 않은지 확인하십시오 . 2) 확인하십시오 n AND (n-1) == 0
. 3) square-nrs 목록을 작성하고 해당 목록에 있는지 확인 n
하십시오.
int
유형 (4 바이트) 의 범위로 제한하는 것에 대해 생각 했지만 실제로 코드가 매우 큰 숫자를 지원하지 않으면 신경 쓰지 않습니다. 답변에 코드의 한계를 명시하십시오.