บทนำ
ความท้าทายนี้ต้องการให้คุณตั้งค่าศูนย์ต่อท้ายของการแสดงเลขฐานสองจำนวนเต็ม010101…
เป็นตัวอย่างนี้อธิบายได้ดีที่สุดด้วย:
รับจำนวนเต็ม400
ขั้นตอนแรกคือการแปลงเป็นไบนารี:
110010000
เนื่องจากเราสามารถเห็นบิตที่ห้าเป็นบิตที่มีนัยสำคัญน้อยที่สุด1
ดังนั้นเริ่มจากตรงนั้นเราแทนค่าศูนย์ล่างโดย0101
:
110010101
ในที่สุดเราแปลงกลับเป็นทศนิยม: 405
ท้าทาย
รับคืนจำนวนเต็มบวก / ค่าผลลัพธ์ที่สอดคล้องกันของกระบวนการที่กำหนดไว้ข้างต้น
กฎระเบียบ
- ลำดับนี้ถูกกำหนดไว้สำหรับเลขจำนวนเต็มอย่างน้อยหนึ่ง
1
บิตดังนั้นอินพุตจะเป็น≥ 1 เสมอ - คุณอาจจะใส่เป็นสตริงรายการของตัวเลข (ทศนิยม) แทน
- คุณไม่ต้องจัดการอินพุตที่ไม่ถูกต้อง
Testcases
ต่อไปนี้เป็นบททดสอบเพิ่มเติมที่มีขั้นตอนตัวกลาง (คุณไม่ต้องพิมพ์ / ส่งคืนสิ่งเหล่านี้):
In -> … -> … -> Out
1 -> 1 -> 1 -> 1
2 -> 10 -> 10 -> 2
3 -> 11 -> 11 -> 3
4 -> 100 -> 101 -> 5
24 -> 11000 -> 11010 -> 26
29 -> 11101 -> 11101 -> 29
32 -> 100000 -> 101010 -> 42
192 -> 11000000 -> 11010101 -> 213
400 -> 110010000 -> 110010101 -> 405
298 -> 100101010 -> 100101010 -> 298
n
พลังสูงสุดของ 2 ที่แบ่งการป้อนข้อมูลออกมาคำตอบก็คือ(input) + ceil((2^n - 2)/3)