คำชี้แจงปัญหา
กำหนดตัวเลขให้ใหญ่สุดโดยสลับบิตที่ตำแหน่งสุดขั้ว เช่น ที่ตำแหน่งแรกและสุดท้าย ตำแหน่งสุดท้ายที่สองและที่สอง เป็นต้น
หากตัวเลขอินพุตคือ 8 การแทนค่าไบนารีของมันคือ−
<ก่อน>00000000 00000000 00000000 00001000หลังจากสลับบิตที่ตำแหน่งสุดขั้วจะกลายเป็น -
00010000 00000000 00000000 00000000 และเทียบเท่าทศนิยมคือ:268435456
อัลกอริทึม
<ก่อน>1. สร้างสำเนาของหมายเลขต้นฉบับ2 ถ้าบิตที่มีนัยสำคัญน้อยกว่าคือ 1 และบิตที่มีนัยสำคัญน้อยกว่าเป็น 0 ให้สลับบิตในบิตจากเท่านั้น ให้ดำเนินการต่อไปจนกว่าตำแหน่งของบิตที่มีนัยสำคัญน้อยกว่าจะน้อยกว่าตำแหน่งของบิตที่มีนัยสำคัญมากกว่า3 ส่งคืนหมายเลขใหม่ตัวอย่าง
#include#define ull unsigned longusing เนมสเปซ std;ull getMaxNumber(ull num){ ull origNum =num; int bitCnt =sizeof(ull) * 8 - 1; int cnt =0; สำหรับ (cnt =0; cnt > cnt) &1; int n =(origNum>> bitCnt) &1; ถ้า (m> n) { int x =(1 < ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
จำนวนสูงสุด =268435456