Bỏ qua để đến nội dung

Hệ nhị phân và hệ cơ số

Mức độ: Cơ bản

Máy tính lưu mọi thứ bằng hai trạng thái bật và tắt, tức là các chữ số 0 và 1: đó là hệ nhị phân. Hiểu cách viết số trong các hệ cơ số giúp giải nhiều bài thi (mã nhị phân, quả cân, bóng đèn…) và là nền tảng cho bài Phép toán bit.

Số 2026 nghĩa là 2 nghìn, 0 trăm, 2 chục, 6 đơn vị:

2026 = 2 × 103 + 0 × 102 + 2 × 101 + 6 × 100

Mỗi vị trí có giá trị gấp 10 lần vị trí bên phải nó, và chỉ dùng các chữ số 0 đến 9.

Thay 10 bằng b (b ≥ 2): mỗi vị trí gấp b lần vị trí bên phải, dùng các chữ số 0 đến b - 1. Với b lớn hơn 10, dùng thêm chữ cái: A = 10, B = 11, …, F = 15 (hệ 16, còn gọi là thập lục phân).

Số nhị phân 1101 có giá trị:

1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = 8 + 4 + 0 + 1 = 13

Đổi từ hệ b sang hệ 10 nhanh hơn bằng cách đọc từ trái sang phải: giá trị mới = giá trị cũ × b + chữ số (giống cách tính số dư của số rất lớn). Với 1101: 1 → 1 × 2 + 1 = 3 → 3 × 2 + 0 = 6 → 6 × 2 + 1 = 13.

Chia liên tiếp cho b, số dư lần lượt là các chữ số từ phải sang trái (giống tách chữ số với 10). Đổi 13 sang hệ 2:

nn % 2n // 2
1316
603
311
110

Đọc số dư từ dưới lên: 13 = 1101(2).

CHU_SO = "0123456789ABCDEF"
def doi_co_so(n, b):
if n == 0:
return "0"
s = ""
while n > 0:
s = CHU_SO[n % b] + s # số dư là chữ số, ghép vào bên trái
n //= b
return s
def ve_thap_phan(s, b):
gia_tri = 0
for c in s:
gia_tri = gia_tri * b + CHU_SO.index(c)
return gia_tri
print(doi_co_so(13, 2), doi_co_so(255, 16), ve_thap_phan("1101", 2)) # 1101 FF 13

Lưu ý: trường hợp n = 0 phải xử lý riêng, nếu không vòng lặp không chạy lần nào và trả về xâu rỗng.

  • Có k bóng đèn (mỗi bóng bật hoặc tắt) thì biểu diễn được 2k trạng thái, tức các số từ 0 đến 2k - 1. Với 8 bóng (1 byte): 0 đến 255.
  • Mọi số tự nhiên đều viết được duy nhất thành tổng các lũy thừa khác nhau của 2. Vì vậy với các quả cân 1, 2, 4, 8, … gam ta cân được mọi khối lượng nguyên, mỗi quả dùng nhiều nhất một lần (bài 14).
  • Hệ 16 dùng để viết gọn nhị phân: mỗi chữ số hệ 16 ứng với đúng 4 chữ số nhị phân (F = 1111), nên mã màu #FF8800 dễ đọc hơn 111111111000100000000000.

Gồm 23 bài, chia thành 4 nhóm từ dễ đến khó. Mỗi bài có một dữ liệu kiểm tra: các bạn chạy chương trình của mình với dữ liệu đó rồi so với đáp số.

Nhập n (0 ≤ n ≤ 1018). In ra biểu diễn nhị phân của n.

Ví dụ: nhập 13 thì in ra 1101.

Kiểm tra: nhập 2026.

Xem đáp số

11111101010

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập một xâu nhị phân (độ dài ≤ 62, không có số 0 thừa ở đầu, trừ số 0). In ra giá trị thập phân.

Ví dụ: nhập 1101 thì in ra 13.

Kiểm tra: nhập 11111101010.

Xem đáp số

2026

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập n, b (0 ≤ n ≤ 1018, 2 ≤ b ≤ 16). In ra biểu diễn của n trong hệ cơ số b (dùng chữ in hoa A-F cho 10-15).

Ví dụ: nhập 255 16 thì in ra FF.

Kiểm tra: nhập 2026 7.

Xem đáp số

5623

Hướng dẫn giải chi tiết: liên hệ tác giả.

Bài 4. Đổi từ hệ cơ số b về thập phân

Phần tiêu đề “Bài 4. Đổi từ hệ cơ số b về thập phân”

Nhập xâu s và b (2 ≤ b ≤ 16, giá trị không quá 1018, chữ cái in hoa). In ra giá trị thập phân của s trong hệ cơ số b.

Ví dụ: nhập FF 16 thì in ra 255.

Kiểm tra: nhập 5623 7.

Xem đáp số

2026

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập s, a, b (2 ≤ a, b ≤ 16, giá trị không quá 1018). s là một số viết trong hệ a, in ra số đó viết trong hệ b.

Ví dụ: nhập 1101 2 16 thì in ra D.

Kiểm tra: nhập 7E9 16 3.

Xem đáp số

2210000

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập n, b (1 ≤ n ≤ 1018, 2 ≤ b ≤ 109). In ra số chữ số của n khi viết trong hệ b.

Ví dụ: nhập 13 2 thì in ra 4.

Kiểm tra: nhập 1000000000000000000 2.

Xem đáp số

60

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập n (1 ≤ n ≤ 3999). In ra n viết bằng số La Mã (I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000; viết 4 là IV, 9 là IX, 40 là XL, 90 là XC, 400 là CD, 900 là CM).

Ví dụ: nhập 14 thì in ra XIV.

Kiểm tra: nhập 2026.

Xem đáp số

MMXXVI

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập n (0 ≤ n ≤ 1018). In ra số chữ số 1 trong biểu diễn nhị phân của n.

Ví dụ: nhập 13 thì in ra 3.

Kiểm tra: nhập 2026.

Xem đáp số

8

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập n, b (n ≤ 1018, 2 ≤ b ≤ 109). In ra tổng các chữ số (tính theo giá trị) của n khi viết trong hệ b.

Ví dụ: nhập 255 16 thì in ra 30.

Kiểm tra: nhập 2026 3.

Xem đáp số

6

Hướng dẫn giải chi tiết: liên hệ tác giả.

Bài 10. Số chữ số 0 tận cùng trong hệ b

Phần tiêu đề “Bài 10. Số chữ số 0 tận cùng trong hệ b”

Nhập n, b (1 ≤ n ≤ 1018, 2 ≤ b ≤ 109). Khi viết n trong hệ b thì có bao nhiêu chữ số 0 ở tận cùng?

Ví dụ: nhập 24 2 thì in ra 3.

Kiểm tra: nhập 1000000000000000000 4.

Xem đáp số

9

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập hai xâu nhị phân (mỗi xâu dài không quá 105), mỗi xâu một dòng. In ra tổng của chúng ở dạng nhị phân.

Ví dụ:

NhậpIn ra
1011
110
10001

Kiểm tra: nhập

111111111
1
Xem đáp số

1000000000

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập hai xâu nhị phân dài (mỗi xâu ≤ 105 chữ số, có thể có số 0 thừa ở đầu), mỗi xâu một dòng. In ra <, = hoặc > cho biết số thứ nhất so với số thứ hai.

Ví dụ:

NhậpIn ra
101
11
>

Kiểm tra: nhập

000110
110
Xem đáp số

=

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập n (n ≤ 106). Đếm các số từ 1 đến n đối xứng (đọc xuôi ngược như nhau) cả khi viết trong hệ 10 và trong hệ 2.

Ví dụ: nhập 10 thì in ra 5.

Kiểm tra: nhập 1000000.

Xem đáp số

19

Hướng dẫn giải chi tiết: liên hệ tác giả.

Có các bao lì xì chứa lần lượt 1, 2, 4, 8, …, 262 đồng (mỗi bao một số tiền). Nhập n (1 ≤ n ≤ 1018). Chọn các bao có tổng đúng bằng n. In ra số tiền của các bao được chọn theo thứ tự tăng dần.

Ví dụ: nhập 13 thì in ra 1 4 8.

Kiểm tra: nhập 2026.

Xem đáp số

2 8 32 64 128 256 512 1024

Hướng dẫn giải chi tiết: liên hệ tác giả.

Có các quả cân 1, 3, 9, 27, …, 3k gam (mỗi loại một quả) và cân hai đĩa: quả cân được đặt ở đĩa bên kia hoặc cùng đĩa với vật. Nhập n (1 ≤ n ≤ 1012), in ra số quả cân ít nhất cần dùng để cân vật nặng n gam.

Ví dụ: nhập 5 thì in ra 3.

Kiểm tra: nhập 2026.

Xem đáp số

4

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập n, k (1 ≤ n ≤ 1018, 1 ≤ k ≤ 60). Đếm các số từ 1 đến n mà biểu diễn nhị phân có đúng k chữ số 1.

Ví dụ: nhập 10 2 thì in ra 5.

Kiểm tra: nhập 2026 5.

Xem đáp số

462

Hướng dẫn giải chi tiết: liên hệ tác giả.

Số may mắn là số chỉ gồm chữ số 4 và 7: 4, 7, 44, 47, 74, 77, 444, … (sắp tăng dần). Nhập k (k ≤ 1018), in ra số may mắn thứ k.

Ví dụ: nhập 5 thì in ra 74.

Kiểm tra: nhập 2026.

Xem đáp số

7777747477

Hướng dẫn giải chi tiết: liên hệ tác giả.

Màu trên máy tính được ghi dạng #RRGGBB, trong đó RR, GG, BB là ba số hệ 16 (mỗi số hai chữ số, từ 00 đến FF) cho độ đỏ, xanh lá, xanh dương. Nhập một mã màu (chữ in hoa), in ra ba số thập phân R G B.

Ví dụ: nhập #FF8800 thì in ra 255 136 0.

Kiểm tra: nhập #1E90FF.

Xem đáp số

30 144 255

Hướng dẫn giải chi tiết: liên hệ tác giả.

Địa chỉ IPv4 gồm 4 số từ 0 đến 255 viết cách nhau dấu chấm, chính là một số 32 bit viết trong hệ 256. Nhập một địa chỉ IP, in ra giá trị của nó (số = a × 2563 + b × 2562 + c × 256 + d).

Ví dụ: nhập 0.0.1.1 thì in ra 257.

Kiểm tra: nhập 192.168.1.1.

Xem đáp số

3232235777

Hướng dẫn giải chi tiết: liên hệ tác giả.

Mọi số nguyên đều viết được duy nhất trong hệ cơ số -2: mỗi chữ số là 0 hoặc 1, vị trí thứ i (từ phải, đếm từ 0) có giá trị (-2)i. Nhập n (|n| ≤ 1015), in ra biểu diễn của n trong hệ -2.

Ví dụ: nhập 6 thì in ra 11010.

Kiểm tra: nhập -2026.

Xem đáp số

100001101010

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập p, q, k (0 ≤ p nhỏ hơn q ≤ 109, k ≤ 1000). In ra k chữ số đầu tiên sau dấu phẩy của p / q viết trong hệ 2 (in liền nhau).

Ví dụ: nhập 1 4 4 thì in ra 0100.

Kiểm tra: nhập 1 10 12.

Xem đáp số

000110011001

Hướng dẫn giải chi tiết: liên hệ tác giả.

Nhập n (3 ≤ n ≤ 106). Tìm cơ số b nhỏ nhất (b ≥ 2) để n viết trong hệ b chỉ gồm toàn chữ số 1.

Ví dụ: nhập 13 thì in ra 3.

Kiểm tra: nhập 4681.

Xem đáp số

8

Hướng dẫn giải chi tiết: liên hệ tác giả.

Một hàng có k bóng đèn, mỗi bóng có 3 trạng thái: tắt, xanh, đỏ. Người ta dùng hàng đèn để báo số: số được báo là giá trị trong hệ 3 với tắt = 0, xanh = 1, đỏ = 2 (bóng trái nhất là chữ số cao nhất). Nhập k và n (k ≤ 38, n nhỏ hơn 3k), in ra trạng thái từng bóng từ trái sang phải dưới dạng xâu gồm T, X, D.

Ví dụ: nhập 3 5 thì in ra TXD.

Kiểm tra: nhập 8 2026.

Xem đáp số

TDDXTTTX

Hướng dẫn giải chi tiết: liên hệ tác giả.