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

ตัวเลขมากที่สุดที่การแทนค่าทศนิยมสองมี m บิต 1 และ m-1 บิต 0 ใน C++

โจทย์

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหาตัวเลขมากที่สุดที่มี 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

สรุป

หากคุณมีคำถามในบทช่วยสอนนี้ ให้กล่าวถึงในส่วนความคิดเห็น