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

ตรวจสอบว่าเลข N เริ่มต้นด้วย 1 ในฐาน b หรือไม่ ใน C++


ตรวจสอบว่าเลข N แทนในฐาน b เริ่มต้นด้วยเลข 1 หรือไม่

ตัวอย่าง: 6 ในฐาน 2 = 110 (ขึ้นต้น 1), ฐาน 4 = 12₄ (ขึ้นต้น 1)

หลักการ: N ในฐาน b มี m+1 บิต ค่าสูงสุดคือ 2×bᵐ - 1 ดังนั้น N อยู่ในช่วง bᵐ ≤ N ≤ 2×bᵐ - 1

m ไม่เกิน ⌊log₂ N⌋ วนตรวจสอบ m=1 ถึง ⌊log₂ N⌋ ว่า N อยู่ในช่วงนั้นหรือไม่

ตัวอย่างโค้ด

#include <iostream>
#include <cmath>
using namespace std;

bool isStartWithOne(int number, int base) {
    int m = log2(number);
    for (int i = 1; i <= m; i++) {
        if (number >= pow(base, i) && number <= 2 * pow(base, i) - 1)
            return true;
    }
    return false;
}

int main() {
    int num = 19, base = 16;
    if (isStartWithOne(num, base))
        cout << "Can be represented";
    else
        cout << "Can not be represented";
}

ผลลัพธ์

Can be represented