คำชี้แจงปัญหา
กำหนดหมายเลขที่ไม่ได้ลงนาม ให้หาจำนวนสูงสุดที่จะเกิดขึ้นได้โดยใช้บิตของหมายเลขที่ไม่ได้ลงนามที่ให้ไว้
หากตัวเลขที่ป้อนคือ 8 การแทนค่าไบนารีของมันคือ−
<ก่อน>00000000000000000000000000001000หากต้องการขยายให้ใหญ่สุด ให้ตั้งค่า MSB เป็น 1 จากนั้นตัวเลขจะกลายเป็น 2147483648 ซึ่งมีการแทนค่าไบนารีเป็น−
<ก่อน>10000000000000000000000000000000อัลกอริทึม
<ก่อน>1. นับจำนวนชุดบิตในการแทนค่าไบนารีของจำนวนที่กำหนด 2 ค้นหาตัวเลขที่มีบิตเซ็ตที่มีนัยสำคัญน้อยที่สุด3 เลื่อนตัวเลขไปทางซ้าย (32 – n)ตัวอย่าง
#includeใช้เนมสเปซ std; getMaxNumber ที่ไม่ได้ลงชื่อ (หมายเลขที่ไม่ได้ลงชื่อ) { int n =__builtin_popcount (num); ถ้า (n ==32) { ส่งคืน num; } ผลลัพธ์ที่ไม่ได้ลงนาม =(1 < ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้−
จำนวนสูงสุด =2147483648