Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เพิ่มจำนวนที่ไม่ได้ลงนามให้มากที่สุดโดยสลับบิตที่ตำแหน่งสูงสุดใน C++


คำชี้แจงปัญหา

กำหนดตัวเลขให้ใหญ่สุดโดยสลับบิตที่ตำแหน่งสุดขั้ว เช่น ที่ตำแหน่งแรกและสุดท้าย ตำแหน่งสุดท้ายที่สองและที่สอง เป็นต้น

หากตัวเลขอินพุตคือ 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 <