Hôm qua trong khi chơi với con tôi tôi nhận thấy số trong xe lửa đồ chơi của nó:
Vậy ta có
Vì vậy, thách thức đơn giản: đưa ra một số không âm làm đầu vào, trả về các giá trị trung thực và falsey nhất quán thể hiện việc có hay không biểu diễn chuỗi của số (trong cơ sở 10 và không có số 0 đứng đầu) bằng cách nào đó có thể được chia thành các số có lũy thừa bằng 2 .
Ví dụ:
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
Đây là môn đánh gôn , vì vậy có thể mã ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!
101
(giả mạo vì 0) ... hoặc điều này vẫn nên đúng ( 1 - 01
)?
101
trường hợp với các câu trả lời hiện tại và tất cả đều trả về true
, bởi vì nó có thể được chia thành 1-01
cả hai quyền hạn của 2, vì vậy tôi sẽ coi trường hợp đó là sự thật.
log2(n)
không chứa chữ số thập phân sau dấu phẩy. 2) Kiểm tra xem n AND (n-1) == 0
. 3) Tạo một danh sách các ô vuông và kiểm tra xem n
có trong danh sách đó không.
int
loại tiêu chuẩn (4 byte), nhưng thực sự tôi không phiền nếu mã của bạn không hỗ trợ số lượng rất lớn. Chỉ cần nêu trong câu trả lời của bạn những hạn chế của mã của bạn.