โดยปกติเราจะแยกตัวเลขออกเป็นเลขฐานสองโดยการกำหนดด้วยกำลังของ 2 ด้วยสัมประสิทธิ์ของ
0
หรือ1
สำหรับแต่ละเทอม:
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
ทางเลือกของ
0
และ1
ก็คือ ... ไม่ได้เป็นแบบไบนารีมาก เราจะทำการขยายฐานสองจริงโดยขยายด้วยพลัง 2 แต่ด้วยสัมประสิทธิ์1
หรือ-1
แทน:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
ตอนนี้ดูเป็นเลขฐานสอง
ด้วยจำนวนที่เป็นบวกใด ๆ คุณควรเห็นว่า:
- ทุกเลขคี่จะมีการขยายไบนารีจริงจำนวนมากอย่างไม่ จำกัด
- เลขคู่ทุกตัวไม่มีการขยายไบนารีที่แท้จริง
ดังนั้นสำหรับการขยายแบบไบนารีที่แท้จริงที่จะกำหนดไว้อย่างดีเราจำเป็นต้องมีการขยายตัวให้น้อยที่สุดนั่นคือด้วยความยาวที่สั้นที่สุด
รับค่าบวกเลขจำนวนเต็มคี่ใด ๆn
ส่งคืนการขยายไบนารีที่แท้จริงจากตัวเลขที่สำคัญที่สุดไปยังตัวเลขที่มีนัยสำคัญน้อยที่สุด (หรือในลำดับที่กลับกัน)
กฎ:
- เช่นนี้คือ รหัสกอล์ฟคุณควรตั้งเป้าหมายให้เป็นไบต์ที่สั้นที่สุด อนุญาตให้สร้างเครื่องได้
- เอาต์พุตใด ๆ ที่สามารถเป็นตัวแทนและแสดงรายการสัมประสิทธิ์เป็นที่ยอมรับได้: อาเรย์สตริงของสัมประสิทธิ์ที่มีตัวคั่น ฯลฯ ...
- มีช่องโหว่มาตรฐานสำหรับการเล่นกอล์ฟ
- โปรแกรมของคุณควรทำงานกับค่าภายในขนาดจำนวนเต็มมาตรฐานของภาษาของคุณ
กรณีทดสอบ
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
แทน-1
สถานะแรงดันไฟฟ้าต่ำ ผู้เรียกที่รับบิตรู้ว่าพวกเขาหมายถึงอะไร (มันยังคงเป็นแบบฝึกหัดการจัดการบิตที่ไม่สำคัญเนื่องจากการหมุนทางขวานั้นจะทำงานได้ก็ต่อเมื่อมันมี 32 บิตที่สำคัญเช่นจำนวน 5 บิตต้องการความกว้างการหมุนที่ 5)
111-1-1
การส่งออกที่ถูกต้องสำหรับ25
?