โจทย์
ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหาตัวเลขมากที่สุดที่มี m บิต 1 และ m - 1 บิต 0
มาดูขั้นตอนการแก้ปัญหา
- กำหนดตัวแปรสองตัว bits และ result ด้วย 2 และ 1 ตามลำดับ
- เขียนลูปที่วนรอบจาก 1 ถึง n
- อัปเดตค่าตัวแปรวนรอบด้วย (pow(2, bits) - 1) * (pow(2, bits - 1))
- ถ้าตัวแปรวนรอบน้อยกว่า n ให้อัปเดต result ด้วย i
- เพิ่มจำนวนบิต
- คืนค่า result
ตัวอย่าง
มาดูโค้ดกัน
#include <bits/stdc++.h>
using namespace std;
long long getTheNumber(long long n) {
long bits = 2;
long long result = 1;
long long i = 1;
while (i < n) {
i = (int)(pow(2, bits) - 1) * (pow(2, bits - 1));
if (i < n) {
result = i;
}
bits++;
}
return result;
}
int main() {
long long n = 654;
cout << getTheNumber(n) << endl;
return 0;
}
ผลลัพธ์
หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
496
สรุป
หากคุณมีคำถามในบทช่วยสอนนี้ ให้กล่าวถึงในส่วนความคิดเห็น