ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่หาจำนวนที่มากที่สุดด้วย m 1 และ m - 1 0
มาดูขั้นตอนการแก้ปัญหากัน
- เริ่มต้นสองตัวแปรบิตและผลลัพธ์ด้วย 2 และ 1 ตามลำดับ
- เขียนลูปที่วนซ้ำจาก 1 ถึง n
- อัปเดตค่าตัวแปรการวนซ้ำด้วย pow(2, bits) - 1) * (pow(2, bits - 1).
- หากตัวแปรวนซ้ำน้อยกว่า n ให้อัปเดตผลลัพธ์ด้วย i
- เพิ่มจำนวนบิตให้มากขึ้น
- ส่งคืน resutl.
ตัวอย่าง
มาดูโค้ดกันเลย
#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
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น