Ta có một số N và một cơ số b. Trong chương trình này, chúng ta phải kiểm tra xem số có bắt đầu bằng 1 trong cơ số b hay không. Giả sử một số 6 được đưa ra. Trong hệ nhị phân, đây là 110, vì vậy nó bắt đầu bằng 1, trong cơ số 4 cũng sẽ là 12 4 . Ở đây nó cũng bắt đầu bằng 1.
Như chúng ta đã biết, nếu một số N được biểu diễn trong cơ số b, b sẽ được chuyển đổi thành m + 1 dãy bit bm bm-1… b0. Điều này ngụ ý b m b m + b m-1 * b m-1 +… + B 0 * b 0 =N. Số lớn nhất sẽ là 2 * b m - 1. Chữ N nằm trong b m ≤ N ≤ 2 * b m - 1. Một điều khác cần lưu ý là m không được vượt quá $ \ lfloor \ log_2 m \; \ rfloor $, điều này là do khi chúng ta biểu diễn bất kỳ số nào trong cơ số 2, nó sẽ được chuyển đổi thành một chuỗi chỉ có 0 và 1, vì vậy độ dài của dãy này sẽ luôn lớn hơn bất kỳ biểu diễn cơ sở nào khác và độ dài của nó sẽ bằng $ \ lfloor \ log_2 m \; \ rfloor + 1 $. Vì vậy, để kiểm tra một số nhất định N bắt đầu bằng 1 trong cơ số b hay không, chúng ta sẽ chuyển từ m =1 đến m =$ \ lfloor \ log_2 m \; \ rfloor $ và kiểm tra xem với bất kỳ giá trị nào của m, N nằm trong phạm vi b m ≤ N ≤ 2 * b m - 1 hoặc không và theo đó trả về True hoặc false.
Ví dụ
#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) //if number is in the given range 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"; } }
Đầu ra
Can be represented