Cho một khoảng [start, end], nhiệm vụ là đếm số lượng chữ số thập lục phân (hexadecimal digits A-F) xuất hiện trong biểu diễn hex của tất cả các số trong khoảng đó.
Hệ thập lục phân (Hexadecimal)
Cơ số 16, các chữ số: 0-9, A(10), B(11), C(12), D(13), E(14), F(15).
Ví dụ
Input - start = 10, End = 13 Output - 4
Giải thích - 10(A), 11(B), 12(C), 13(D) → 4 ký tự hex.
Input - start = 15, End = 16 Output - 1
Giải thích - 15(F) là hex, 16(0x10) không có chữ cái A-F.
Phương pháp tiếp cận
- Duyệt i từ start đến end
- Nếu 10 ≤ i ≤ 15: count++ (là A-F trực tiếp)
- Nếu i > 15: chuyển sang cơ số 16, kiểm tra từng chữ số (i % 16) có ≥ 10 không
Ví dụ code C++
#include <iostream>
using namespace std;
int counthexa(int start, int end) {
int result = 0;
for (int i = start; i <= end; i++) {
if (i >= 10 && i <= 15) {
result++;
} else if (i > 15) {
int k = i;
while (k != 0) {
if (k % 16 >= 10)
result++;
k /= 16;
}
}
}
return result;
}
int main() {
int start = 10, end = 60;
cout << "count is: " << counthexa(start, end);
return 0;
}
Kết quả
count is: 21