ตรวจสอบว่าเลข 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