Thông thường, chúng tôi phân tách một số thành các chữ số nhị phân bằng cách gán nó với lũy thừa là 2, với hệ số
0
hoặc1
cho mỗi số hạng:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
Sự lựa chọn
0
và1
... không phải là nhị phân. Chúng ta sẽ thực hiện mở rộng nhị phân thực sự bằng cách mở rộng với lũy thừa bằng 2, nhưng với hệ số1
hoặc-1
thay vào đó:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
Bây giờ này vẻ nhị phân.
Với bất kỳ số dương nào, sẽ rất tầm thường khi thấy rằng:
- Mỗi số lẻ có vô số lần mở rộng nhị phân thực
- Mỗi số chẵn không có mở rộng nhị phân thực sự
Do đó, để mở rộng nhị phân thực sự được xác định rõ, chúng tôi yêu cầu mở rộng phải nhỏ nhất , tức là với độ dài ngắn nhất.
Cho bất kỳ số nguyên dương, lẻ n
, trả về khai triển nhị phân thực của nó, từ chữ số có nghĩa nhất đến chữ số có nghĩa nhỏ nhất (hoặc theo thứ tự đảo ngược).
Quy tắc:
- Vì đây là môn đánh gôn , bạn nên cố gắng làm điều này với số byte ngắn nhất có thể.Nội tích được cho phép.
- Bất kỳ đầu ra nào có thể biểu diễn và liệt kê các hệ số đều được chấp nhận: một mảng, một chuỗi các hệ số có dấu phân cách, v.v ...
- Tiêu chuẩn chơi golf áp dụng.
- Chương trình của bạn sẽ hoạt động cho các giá trị trong kích thước số nguyên tiêu chuẩn của ngôn ngữ của bạn.
Các trường hợp thử nghiệm
25 -> [1,1,1,-1,-1]
47 -> [1,1,-1,1,1,1]
1 -> [1]
3 -> [1,1]
1234567 -> [1,1,-1,-1,1,-1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,1]
0
thay vì -1
cho trạng thái điện áp thấp. Người gọi nhận được các bit biết ý nghĩa của chúng. (Đây vẫn là một bài tập thao tác bit không tầm thường, vì quyền xoay chỉ hoạt động nếu nó có 32 bit đáng kể. Ví dụ: số 5 bit cần độ rộng xoay là 5.)
111-1-1
một đầu ra hợp lệ cho 25
?