Hệ Hexa Sử Dụng Các Kí Hiệu :, Hệ Hexa Sử Dụng Các Kí Hiệu: A

-
I. Ra mắt chung

Trong Toán học, hệ cơ số (hay hệ đếm) là một hệ thống các kí hiệu toán học và quy tắc thực hiện tập kí hiệu đó để màn biểu diễn số đếm. Các kí hiệu toán học rất có thể là chữ số hoặc các kí từ chữ cái. đề nghị phân biệt giữa Hệ cơ sốCơ số (số lượng kí hiệu thực hiện trong một hệ cơ số).

Bạn đang xem: Hệ hexa sử dụng các kí hiệu

Có rất nhiều hệ cơ số không giống nhau, mỗi hệ cơ số bao gồm quy tắc màn trình diễn số khác nhau. Phần nhiều dãy kí hiệu như là nhau hoàn toàn có thể sẽ ứng với những số khác biệt trong các hệ đếm khác nhau. Lấy một ví dụ trong hệ thập phân, 111111 biểu thị số "mười một", tuy nhiên trong hệ nhị phân, này lại thể hiện nay số "ba",... Số đếm mà lại dãy kí hiệu biểu lộ được hotline là quý hiếm của nó.

Có hai một số loại hệ cơ số là hệ cơ số phụ thuộc vào vị trí cùng hệ cơ số không phụ thuộc vào vào vị trí. Chẳng hạn, hệ đếm La Mã là một trong hệ cơ số không phụ thuộc vào vào vị trí. Hệ đếm này gồm các kí hiệu chữ cái: I,V,X,L,C,D,M;I, V, X, L, C, D, M;I,V,X,L,C,D,M; từng kí hiệu có giá trị núm thể:

I=1,V=5,X=10,L=50,C=100,D=500,M=1000I=1, V=5, X=10, L=50, C=100, D=500, M=1000I=1,V=5,X=10,L=50,C=100,D=500,M=1000

Trong hệ đếm này, giá trị của những kí hiệu không phụ thuộc vào địa chỉ của nó. Ví dụ, vào hai trình diễn IX (9)IX (9)IX (9) với XI (11)XI (11)XI (11) thì XXX đều có giá trị là 101010.

Các hệ đếm thường dùng là những hệ đếm phụ thuộc vị trí. Hầu như số nguyên basebasebase ngẫu nhiên có giá chỉ trị to hơn 111 đều hoàn toàn có thể được chọn làm cơ số cho một hệ đếm. Trong số hệ đếm các loại này, con số kí hiệu sử dụng sẽ chính bằng cơ số của hệ đếm đó, và quý hiếm tương ứng của các kí hiệu là: 0,1,2,...,base−10, 1, 2,..., base - 10,1,2,...,base−1. Để biểu đạt một màn biểu diễn XXX là trình diễn của số nghỉ ngơi hệ cơ số basebasebase, ta kí hiệu là Xbase
X_baseXbase​.

II. Trình diễn số trong các hệ đếm

1. Giá trị của một số trong những trong hệ cơ số bất kỳ

Trong một hệ cơ số b,b,b, đưa sử số NNN bao gồm biểu diễn:

dndn−1dn−2...d0,d−1d−2...d−md_nd_n-1d_n-2...d_0,d_-1d_-2...d_-mdn​dn−1​dn−2​...d0​,d−1​d−2​...d−m​

Trong đó gồm n+1n + 1n+1 chữ số phía trái dấu phẩy, mmm chữ số bên phải dấu phẩy thể hiện cho phần nguyên với phần phân của N,N,N, với 0≤dib0 le d_i 0≤di​b. Lúc đó giá trị của số NNN được tính theo công thức:

N=dnbn+dn−1bn−1+...+d0b0+d−1b−1+d−2b−2+...+d−mb−m
N=d_nb^n+d_n-1b^n-1+...+ d_0b^0+d_-1b^-1+d_-2b^-2+...+ d_-mb^-mN=dn​bn+dn−1​bn−1+...+d0​b0+d−1​b−1+d−2​b−2+...+d−m​b−m

Giá trị của một số trong hệ cơ số bbb cũng đó là biểu diễn tương ứng của nó sinh sống hệ cơ số 101010.

Cài đặt

Chương trình tính giá chỉ trị một số thực NNN vào hệ cơ số bbb. Ta có thể làm cách 1-1 giản hơn hoàn toàn như sau: Coi như số đó ko có phần phân, tính giá trị của nó trong hệ cơ số bbb rồi phân tách cho 10x,10^x,10x, với xxx là số chữ số phần phân.

Ngôn ngữ C++:

void enter(string &N, int &b) getline(cin, N); // Nhập N ngơi nghỉ dạng xâu. Cin >> b;// Tính quý giá của trình diễn N vào hệ cơ số b, chính là biểu diễn thập phân của nó.double get_value(string &N, int b) int pos = N.find("."); // tìm vị trí lốt "." của N. Long long mul = (long long) pow(10, N.size() - pos - 1); // Tính cực hiếm từng phần, để ý ép phong cách số thực. Double value = 0, nguồn = 1; for (int i = N.size() - 1; i >= 0; --i) value += (double) (N - "0") * power; power nguồn = nguồn * (double) b; return value / mul;main() string N; int b; enter(N, b); solution(N, b);Ngôn ngữ Python:

def enter(N, b): N = input() b = int(input())def get_value(N, b): pos = N.find(".") mul = b ** (len(s) - pos - 1) if pos >= 0 else 1 res, nguồn = 0, 1 for d in N<::-1>: if d != ".": res += nguồn * int(d) power *= b return res / mulif __name__ == "__main__": N = "" b = 0 enter(N, b) get_value(N, b)

2. Những hệ cơ số phổ biến trong Tin học

Trong Tin học, xung quanh hệ cơ số 101010, người ta còn áp dụng hai một số loại hệ đếm sau:

Hệ cơ số 222 (Hệ nhị phân): Chỉ thực hiện hai kí hiệu 000 và 111. đem ví dụ, 10112=1×20+1×21+0×22+1×23=11101011_2=1 imes 2^0 + 1 imes 2^1 + 0 imes 2^2 + 1 imes 2^3=11_1010112​=1×20+1×21+0×22+1×23=1110​.Hệ cơ số 161616 (Hệ thập lục phân giỏi hệ Hexa): Sử dụng các chữ số tự 000 tới 999 và 666 vần âm A,B,C,D,E,F;A, B, C, D, E, F;A,B,C,D,E,F; trong số đó A,B,C,D,E,FA, B, C, D, E, FA,B,C,D,E,F có giá trị lần lượt là 10,11,12,13,14,1510, 11, 12, 13, 14, 1510,11,12,13,14,15. Lấy ví dụ, 16A=10×160+6×161+1×162=3621016A = 10 imes 16^0+6 imes 16^1+1 imes 16^2=362_1016A=10×160+6×161+1×162=36210​.

3. Màn trình diễn số nguyên và số thực

3.1. Trình diễn số nguyên

Trong Tin học, những số nguyên hoàn toàn có thể được màn biểu diễn dưới dạng tất cả dấu hoặc không dấu. Để trình diễn số nguyên, ta có thể chọn kích thước số nguyên là 111 byte, 222 byte, 444 byte$,...,2^N$ byte, mỗi bí quyết chọn sẽ tương xứng với một khoảng giá trị hoàn toàn có thể biểu diễn.

Đối với số nguyên không âm, form size 2N2^N2N byte sẽ tàng trữ được các số vào phạm vi trường đoản cú 000 tới (28×2N−1),(2^8 imes 2^N - 1),(28×2N−1), vì 111 byte tất cả 888 bit và toàn cục các bit phần nhiều được áp dụng để màn trình diễn giá trị số.

Đối với số nguyên tất cả dấu, bit bên đề nghị nhất của số nguyên vẫn được dùng để làm thể hiện vệt của số đó, quy mong 111 là vệt âm, 000 là dấu dương, các bit còn lại sẽ dùng để biểu diễn giá trị số. Theo đó, số nguyên kích thước 2N2^N2N sẽ màn biểu diễn được những giá trị trong phạm vi (−28×2N−1+1)(-2^8 imes 2^N - 1 + 1)(−28×2N−1+1) mang đến (28×2N−1−1)(2^8 imes 2^N - 1 - 1)(28×2N−1−1). Sự việc này sẽ liên quan tới việc lựa lựa chọn kiểu dữ liệu với kiểm soát bộ lưu trữ chương trình khi lập trình.

*

3.2. Trình diễn số thực

Khác với cách viết vào Toán học, khi mà ta sử dụng dấu , để phân làn giữa phần nguyên với phần phân; trong Tin học ta rứa dấu , bởi dấu ., và các nhóm bố chữ số cạnh nhau vẫn viết liền. Ví dụ, vào toán ta viết 123 456,789;123 456,789;123 456,789; thì trong Tin học đã viết là 123456.789123456.789123456.789.

Một cách màn trình diễn mà máy vi tính sử dụng để tàng trữ số thực là dạng khoa học, khi hầu như số thực sẽ tiến hành biểu diễn ở dạng ±M×10±Kpm M imes 10^pm K±M×10±K. Trong đó, 0,1≤M1,M0,1 le M 0,1≤M1,M được điện thoại tư vấn là phần định trị, với KKK là một trong những nguyên không âm được điện thoại tư vấn là phần bậc. Ví dụ, số 123 456,789123 456,789123 456,789 sẽ được biểu diễn bên dưới dạng khoa học là 0.123456789×1060.123456789 imes 10^60.123456789×106.

4. Phân bóc tách các chữ số của một trong những nguyên

Việc đếm số chữ số của một số nguyên dương NNN ko có gì khó khăn, bởi vì các số nguyên đều có thể coi như biểu diễn dưới dạng thập phân. Vì thế, ta sẽ phân tách NNN mang lại 101010 tới khi thương bằng 0,0,0, số lần phân tách sẽ tương ứng với số chữ số của NNN.

Cài đặt 1: Đếm số chữ số của số nguyên dương NNN theo cách thủ công

Ngôn ngữ C++:

int cnt_digits(int n) // Xét riêng trường thích hợp n = 0. If (n == 0) return 1; int digits = 0; while (n != 0) ++digits; n /= 10; return digits;Ngôn ngữ Python:

def cnt_digits(N): digits = 0 while N != 0: digits += 1 N /= 10 return digits
Tuy nhiên, hãy mang sử số nguyên NNN có nnn chữ số được trình diễn ở hệ thập phân dưới dạng:

N=dndn−1dn−2...d1N=d_nd_n-1d_n-2...d_1N=dn​dn−1​dn−2​...d1​

Phân tích kết cấu số của N,N,N, ta có:

N=dn×10n−1+dn−1×10n−2+...+d1×100N=d_n imes 10^n - 1 + d_n-1 imes10^n-2+...+d_1 imes 10^0N=dn​×10n−1+dn−1​×10n−2+...+d1​×100

⇒log⁡(dn×10n−1)≤log⁡(N)=log⁡(dn×10n−1+dn−1×10n−2+...+d1×100)≤log⁡(10n)Rightarrow log(d_n imes 10^n-1) le log(N)=log(d_n imes 10^n - 1 + d_n-1 imes10^n-2+...+d_1 imes 10^0) le log(10^n)⇒log(dn​×10n−1)≤log(N)=log(dn​×10n−1+dn−1​×10n−2+...+d1​×100)≤log(10n)

⇔(n−1)≤log⁡(N)≤nLeftrightarrow (n-1)le log(N) le n⇔(n−1)≤log(N)≤n.

⇔log⁡(N)≤n≤log⁡(N)+1Leftrightarrow log(N) le n le log(N)+1⇔log(N)≤n≤log(N)+1.

Giữa nhì số log⁡(N)log(N)log(N) và log⁡(N)+1log(N)+1log(N)+1 chỉ gồm duy nhất một số trong những là ⌊log⁡(N)⌋+1leftlfloorlog(N) ight floor + 1⌊log(N)⌋+1. Vậy n=⌊log⁡(N)⌋+1n=leftlfloorlog(N) ight floor + 1n=⌊log(N)⌋+1.

Khi đó, các bạn có thể sử dụng trực tiếp hàm log10() của thư viện trong C++, hàm log() vào thư viện math của Python để đếm số chữ số của NNN.

Cài đặt 2: Đếm số chữ số của số nguyên dương NNN bằng hàm log

Ngôn ngữ C++:

#include using namespace std;int cnt_digits(int N) return (int) log10(N) + 1;Ngôn ngữ Python:

import mathdef cnt_digits(N): return int(log(N)) + 1Dựa vào biểu diễn trên của số nguyên N,N,N, ta thừa nhận thấy, chữ số hàng đơn vị của N chính bằng N mod 10,N ext gian lận 10,N mod 10, chữ số hàng trăm bằng N mod 100,…,N ext gian lận 100, dots,N mod 100,…, chữ số sinh sống hàng trang bị KKK tính từ yêu cầu qua trái chính bởi N mod 10KN ext mod 10^KN mod 10K. Đối với ngẫu nhiên hệ cơ số làm sao ta cũng có thể coi như sẽ ở hệ cơ số 101010 để tìm các chữ số từ đề nghị qua trái theo phong cách này.

Cài đặt 3: Xác định chữ số thứ KKK từ mặt phải lịch sự của số nguyên dương NNN

Ngôn ngữ C++:

// Tìm chữ số thứ K từ bên phải thanh lịch của số nguyên dương N.int find_k_digits(int N, int K) int power nguồn = (int) pow(10, K); return N % power;Ngôn ngữ Python:

# Tìm chữ số thứ K từ mặt phải quý phái của số nguyên dương N.def find_k_digits(N, K): power nguồn = 10 ** K return N % power
III. Biến hóa giữa những hệ cơ số

1. Biến đổi từ hệ cơ số 101010 sang những hệ cơ số khác

Xét số thực NNN làm việc hệ cơ số 101010. Để tìm màn trình diễn của NNN vào hệ cơ số bbb, ta sẽ lần lượt thay đổi phần nguyên và phần phân, kế tiếp ghép bọn chúng lại với nhau.

1.1. đổi khác phần nguyên

Xét phần nguyên của NNN là KKK. đưa sử trong hệ đếm b,Kb, Kb,K có giá trị là:

K=dnbn+dn−1bn−1+⋯+d1b+d0K=d_nb^n + d_n-1b^n-1 + cdots + d_1b + d_0K=dn​bn+dn−1​bn−1+⋯+d1​b+d0​

Do 0≤d0b0 le d_0 0≤d0​b nên những lúc chia KKK mang đến bbb thì phần dư của phép chia là d0,d_0,d0​, còn yêu thương là:

K1=dnbn+dn−1bn−1+⋯+d1K_1=d_nb^n + d_n-1b^n-1 + cdots +d_1K1​=dn​bn+dn−1​bn−1+⋯+d1​

Tương tự, d1d_1d1​ đó là phần dư của phép phân chia K1K_1K1​ mang lại b,b,b, cùng sẽ chiếm được K2K_2K2​ là mến của phép phân chia đó. Lặp lại quy trình chia như bên trên tới lúc thu được thương bởi 0,0,0, khi đó biểu diễn của KKK ngơi nghỉ hệ cơ số bbb là dn...d0d_n...d_0dn​...d0​. Nói giải pháp khác, ta đem KKK phân chia cho b,b,b, thu nhấn thương cùng số dư ở những lần chia tính đến khi thương bởi 0,0,0, lúc đó viết những số dư theo lắp thêm tự ngược từ bên dưới lên trên thì đã thu được màn biểu diễn của KKK làm việc hệ cơ số bbb.

Ví dụ, cùng với K=410K=4_10K=410​ và b=2,b=2,b=2, vượt trình biến hóa sẽ diễn ra như sau:

Chia 444 mang đến 222, chiếm được K1=2,d0=0K_1=2, d_0 = 0K1​=2,d0​=0.Chia 222 mang đến 222, nhận được K2=1,d1=0K_2=1, d_1=0K2​=1,d1​=0.Chia 111 cho 222, nhận được K3=0,d2=1K_3=0, d_2=1K3​=0,d2​=1.Tới đây quy trình dừng lại, thu được tác dụng 410=10024_10=100_2410​=1002​.Cài đặt

Ngôn ngữ C++:

// đưa phần nguyên K của số N quý phái hệ đếm b, lưu giữ vào chuỗi res.string change_integer_path(int K, int b) string res; while (K != 0) res = (char) (K % b + 48) + res; K /= b; return res;Ngôn ngữ Python:

# Chuyển phần nguyên K của số N lịch sự hệ đếm b, lưu vào chuỗi res. Def change_integer_path(K, b): res = "" while K != 0: res = str(K % b) + res K /= b return res

1.2. Biến hóa phần phân

Xét phần phân của số thực NNN là K′K"K′. Giả sử vào hệ đếm b,K′b, K"b,K′ có mức giá trị là:

K′=d−1b−1+d−2b−2+⋯+d−mb−m (1)K"=d_-1b^-1+d_-2b^-2 + cdots + d_-mb^-m (1)K′=d−1​b−1+d−2​b−2+⋯+d−m​b−m (1)

Nhân cả 222 vế của (1)(1)(1) với b,b,b, ta có:

K1′=d−1+d−2b−1+⋯+d−mb−(m−1)K"_1=d_-1+d_-2b^-1+cdots+d_-mb^-(m-1)K1′​=d−1​+d−2​b−1+⋯+d−m​b−(m−1)

Ta thấy, d−1d_-1d−1​ đó là phần nguyên của hiệu quả phép nhân K′K"K′ với bbb, còn phần phân của công dụng là:

K2′=d−2b−1+⋯+d−mb−(m−1) (2)K"_2=d_-2b^-1+cdots+d_-mb^-(m-1) (2)K2′​=d−2​b−1+⋯+d−m​b−(m−1) (2)

Tiếp tục lặp lại phép nhân như bên trên với (2),(2),(2), ta sẽ thu được d−2d_-2d−2​ là phần nguyên. Làm liên tiếp theo giải pháp này, sau cùng thu được dãy d−1d−2d−3...,d_-1d_-2d_-3...,d−1​d−2​d−3​..., trong các số đó 0≤dib0 le d_i 0≤di​b. Nói giải pháp khác, lấy phần phân K′K"K′ nhân liên tục với b,b,b, ở từng bước thu thừa nhận chữ số ở đoạn nguyên của tác dụng và lặp lại quá trình nhân với phần phân của kết quả tính đến khi thu được con số chữ số như ý muốn.

Xem thêm: Bánh Custas Bao Nhiêu Calo ? Ăn Bánh Custas Có Béo Không? Ăn Bánh Custas Có Béo Không

Ví dụ, cùng với K′=0.12310,b=2K"=0.123_10, b=2K′=0.12310​,b=2 và phải lấy tới 555 chữ số phần phân ở kết quả, ta làm cho như sau:

0.123×2=0.246→d−1=00.123 imes 2 = 0.246 ightarrow d_-1=00.123×2=0.246→d−1​=0.0.246×2=0.492→d−2=00.246 imes 2 = 0.492 ightarrow d_-2=00.246×2=0.492→d−2​=0.0.492×2=0.984→d−3=00.492 imes 2 = 0.984 ightarrow d_-3=00.492×2=0.984→d−3​=0.0.984×2=1.968→d−4=10.984 imes 2 = 1.968 ightarrow d_-4=10.984×2=1.968→d−4​=1.0.968×2=1.936→d−5=10.968 imes 2 = 1.936 ightarrow d_-5=10.968×2=1.936→d−5​=1.⋯cdots⋯

Tới phía trên thu được công dụng 0.12310=0.00011...20.123_10=0.00011..._20.12310​=0.00011...2​

Cài đặt

Ngôn ngữ C++:

// đưa phần phân K thanh lịch hệ đếm b, lấy cnt_digits chữ số phần phân.string change_double_path(double K, int b, int cnt_digits) string ans; while (ans.size() cnt_digits) double next_K = K * (double) b; int digit = (int) next_K; ans = ans + (char) (digit + 48); K = next_K - (int) next_K; return ans;Ngôn ngữ Python:

# Chuyển phần phân K sang trọng hệ đếm b, lấy cnt_digits chữ số phần phân.def change_double_path(K, b, cnt_digits): res = <> while len(res) cnt_digits: next_K = K * float(b) digit = int(next_K) res.append(digit) K = next_K - int(next_K) return res

2. Thay đổi số từ hệ cơ số xxx thanh lịch hệ cơ số yyy

Để chuyển một trong những NNN tự hệ cơ số xxx sang hệ cơ số y,y,y, ta làm cho theo các bước sau:

Bước 111: Tính giá trị của số NNN vào hệ cơ số x,x,x, có thể nói là đưa Nx
N_x
Nx​ sang hệ cơ số 101010.Bước 222: Chuyển kết quả vừa kiếm được sang hệ cơ số yyy theo cách thức chuyển một số ở hệ 101010 sang hệ yyy ở trong phần 111.

Cài đặt

Tái sử dụng lại một số hàm đã chế tạo sẵn ở trên: get_value(), change_integer_path(), change_double_path, ta sẽ biến hóa được số thực NNN từ hệ cơ số xxx sang hệ cơ số yyy.

Ngôn ngữ C++:

// chuyển số thực N trường đoản cú hệ đếm x quý phái hệ đếm y, mang d chữ số sau dấu phẩy.string change_x_to_y(double N, int x, int y, int d) string NN = to_string(N); double value_x = get_value(NN, x); int integer_path = (int) value_x; double double_path = value_x - integer_path; string res = change_integer_path(integer_path, y) + "." + change_double_path(double_path, y, d); return res;Ngôn ngữ Python:

def change_x_to_y(N, x, y, d): NN = str(N) value_x = get_value(NN, x) integer_path = int(value_x) double_path = value_x - integer_path res = change_integer_path(integer_path, y) + "." + change_double_path(double_path, y, d) return res

3. Biến hóa giữa hệ cơ số 222 (hệ nhị phân) với hệ cơ số 161616 (hệ Hexa)

Do 161616 là lũy quá của 222 (16=24)(16=2^4)(16=24), đề xuất việc biến đổi giữa hệ nhị phân với hệ hexa có thể được thực hiện dễ ợt theo phép tắc sau:

Bước 111: Tính từ vị trí phân làn phần nguyên với phần phân, ta gộp các chữ số thành từng đội 444 chữ số về hai phía trái phải, giả dụ thiếu chữ số sẽ thế bằng những chữ số 000.Bước 222: Tính quý giá của từng team chữ số, tiếp đến thay tác dụng bằng một kí hiệu tương xứng ở hệ Hexa. Lấy ví dụ như 222 khớp ứng với 222, 101010 khớp ứng với AAA,...Bước 333: Đặt những kí hiệu sau thời điểm đã biến đổi vào đúng sản phẩm công nghệ tự của từng nhóm, ta thu được hiệu quả chuyển đổi.

Cài đặt 1: Chuyển đổi từ hệ nhị phân thanh lịch hệ Hexa

#include using namespace std;const char hexa<16> = "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F";string binary_to_hexa(double N) string NN = to_string(N); int pos = NN.find("."); string left_path = NN.substr(0, pos), right_path = NN.substr(pos + 1, NN.size() - pos); // bổ sung cập nhật đủ chữ số 0 để chế tạo ra thành các nhóm 4. While (left_path.size() % 4 != 0) left_path = "0" + left_path; while (right_path.size() % 4 != 0) right_path = right_path + "0"; string ans_left, ans_right; for (int i = 0; i left_path.size() - 3; i += 4) // Gộp nhiều 4 kí từ bỏ liên tiếp. String group = left_path.substr(i, 4); // Tính giá bán trị các 4 kí tự. Int power nguồn = 1, value = 0; for (int j = 3; j >= 0; --j) value += (group - "0") * power; nguồn *= 2; // đem kí từ bỏ hexa có giá trị tương ứng. Ans_left = ans_left + hexa; for (int i = 0; i right_path.size() - 3; ++i) string group = right_path.substr(i, 4); int nguồn = 1, value = 0; for (int j = 3; j >= 0; --j) value += (group - "0") * power; power *= 2; ans_right = ans_right + hexa; return (ans_left + "." + ans_right);Ngôn ngữ Python:

hexa = <"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F">def binary_to_hexa(n: float) -> str: nn = str(n) pos = nn.index(".") left_path, right_path = nn<:pos>, nn # bổ sung đủ chữ số 0 để tạo thành các nhóm 4. While len(left_path) % 4 != 0: left_path = "0" + left_path while len(right_path) % 4 != 0: right_path = right_path + "0" ans_left, ans_right = "", "" for i in range(0, len(left_path)-3, 4): # Gộp các 4 kí tự liên tiếp group = left_path # Tính giá chỉ trị cụm 4 kí tự. Power, value = 1, 0 for j in range(3, -1, -1): value += int(group) * nguồn power *= 2 # rước kí tự hexa có giá trị tương ứng. Ans_left = ans_left + hexa for i in range(0, len(right_path)-3, 4): group = right_path power, value = 1, 0 for j in range(3, -1, -1): value += int(group) * nguồn power *= 2 ans_right = ans_right + hexa return ans_left + "." + ans_right
Ở chiều hướng ngược lại, khi gửi từ hệ nhị phân quý phái hệ hexa, chúng ta chỉ bắt buộc đổi từng kí tự hexa quý phái cụm tư kí trường đoản cú nhị phân có giá trị tương ứng. Ta có thể đơn giản hóa bằng cách khởi tạo trước một mảng binary_code extbinary\_codebinary_code gồm 151515 phần tử, với nghĩa nghĩa binary_code extbinary\_codebinary_code là biểu diễn nhị phân tương ứng với kí tự Hexe i (0≤i≤15)i (0 le i le 15)i (0≤i≤15). Lưu lại ý rằng, với i>10i > 10i>10 thì sẽ tương ứng với các kí tự A, B, C, D, E, F nên ta cần xử lý tinh tế để biết được kí tự chữ cái tương ứng với iii bằng bao nhiêu.

Cài đặt 2: Chuyển đổi từ hệ Hexa thanh lịch hệ nhị phân

Ngôn ngữ C++:

string hexa_to_binary(double N) string binary_code<15> = "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" string NN = to_string(N); string res; for (int i = 0; i NN.size(); ++i) if ("0" NN && NN "9") res += binary_code - "0">; else if ("A" NN && NN "F") int pos = NN - 55; res += binary; return res;Ngôn ngữ Python:

def hexa_to_binary(n: float) -> str: binary_code = <"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"> nn = str(n) res = "" for i in range(len(nn)): if "0" nn và nn "9": res += binary_code - "0"> elif "A" nn & nn "F": pos = nn - 55 res += binary_code return res
IV. Vấn đề minh họa

1. Số nhị phân sản phẩm công nghệ K

Đề bài

Xét những số nhị phân bao gồm độ lâu năm NNN với số nhỏ bé nhất là 100…0‾overline100…0100…0 (N−1N-1N−1 chữ số 000) với số lớn số 1 là 111…1‾overline111…1111…1 (NNN chữ số 111). Ví dụ như với N=3,N=3,N=3, ta có các số nhị phân độ nhiều năm 3 là 100,101,110100,101,110100,101,110 cùng 111111111.

Yêu cầu: cho trước nhì số nguyên dương NNN cùng KKK. Hãy xác định số nhị phân đồ vật KKK trong hàng số nhị phân gồm độ lâu năm N?
N?
N?

Input:

Một loại duy nhất chứa hai số nguyên dương NNN với KKK.

Ràng buộc:

1≤N≤301 le N le 301≤N≤30.1≤K≤1091 le K le 10^91≤K≤109.

Output:

Số nhị phân sản phẩm KKK tra cứu được.

Sample Input:

3 3Sample Output:

110

Ý tưởng

Trong dãy nhị phân có độ nhiều năm N,N,N, số bé nhất là: 100…0‾overline100…0100…0 (N−1N - 1N−1 chữ số 000). Số này có giá trị tương xứng trong hệ thập phân chính là 2N−12^N - 12N−1. ước ao lấy số vật dụng K,K,K, ta chỉ cần cộng thêm K−1K - 1K−1 đơn vị vào số nhỏ nhắn nhất đó, mà lại nếu như tiến hành cộng nghỉ ngơi hệ nhị phân thì sẽ khá phức tạp. Vì chưng đó, ta có thể lấy luôn luôn giá trị 2N−1+(K−1)2^N - 1 + (K - 1)2N−1+(K−1) sống hệ thập phân của số nhị phân sản phẩm công nghệ K,K,K, rồi đổi trái lại hệ nhị phân, kết quả vẫn sẽ trọn vẹn chính xác.

Độ phức tạp: O(N)O(N)O(N).

Code mẫu

#include #define int long longusing namespace std;void solution(int n, int k) int power nguồn = 1 (n - 1) + (k - 1); // Tính 2^n - 1 + (k - 1). String res; while (power > 0) if (power % 2) res = "1" + res; else res = "0" + res; power /= 2; cout res;main() ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; solution(n, k); return 0;

2. Màn biểu diễn nhị phân

Đề bài

Mọi số nguyên dương XXX đều hoàn toàn có thể biểu diễn trong hệ nhị phân giống như như trình diễn trong hệ thập phân. Chẳng hạn, số X=17X=17X=17 có biểu diễn nhị phân là 100011000110001 vày 17=1×24+117=1×2^4+117=1×24+1.

Yêu cầu: mang lại trước một trong những nguyên dương XXX. Hãy tiến hành các yêu ước sau:

Tìm màn trình diễn nhị phân của số XXX.Tìm số YYY lớn nhất trong hệ thập phân làm thế nào cho biểu diễn nhị phân của YYY thu được từ XXX bằng phương pháp hoán vị vòng quanh các chữ số trong trình diễn nhị phân của XXX.

Input:

Gồm một số trong những nguyên dương XXX duy nhất.

Ràng buộc:

1≤X≤1091≤X≤10^91≤X≤109.

Output:

Dòng thứ nhất ghi màn biểu diễn nhị phân của XXX.Dòng đồ vật hai ghi số YYY kiếm tìm được.

Sample Input:

17Sample Output:

1000124Giải thích:

Ta bao gồm 17=1×24+1,17=1×2^4+1,17=1×24+1, cho nên vì vậy biểu diễn nhị phân của 171717 là 100011000110001.

Số nhị phân có mức giá trị lớn nhất thu được tự XXX khi thiến vòng quanh các chữ số trong màn trình diễn nhị phân của XXX là 110001100011000. Số đó có giá trị thập phân là 242424.

Ý tưởng

Đối cùng với yêu ước thứ nhất, ta dùng thuật toán biến đổi từ hệ cơ số 101010 sang trọng hệ nhị phân thông thường, không có gì đặc biệt. Kế tiếp lưu công dụng thu được vào một xâu sss.

Đối cùng với yêu cầu thứ hai, trước tiên các bạn cần nắm rõ thế làm sao là hoán vị vòng quanh? bởi vì có rất nhiều bạn ở bài bác này sẽ lầm tưởng kết quả là đảo toàn bộ số 111 lên trước, số 000 về cuối. Tuy nhiên, ta chỉ được phép xét các hoán vị vòng quanh của xâu nhị phân s,s,s, có nghĩa là cứ đảo một chữ số từ trên đầu xuống cuối thì ta được một thiến vòng quanh, chứ chưa hẳn hoán vị lộn xộn toàn bộ các chữ số. Như vậy, trường hợp xâu nhị phân có độ dài nnn thì ta sẽ có nnn thiến vòng quanh.

Để xét những hoán vị vòng quanh, ta thực hiện một kinh nghiệm nhỏ, sẽ là nhân đôi xâu. Chẳng hạn, xâu 110011 sẽ trở thành 110011110011. Gọi nnn là độ lâu năm của xâu nhị phân cũ, ta xét từng địa chỉ i (0≤in),i (0 le i i (0≤in), thì một xâu bé độ dài nnn bắt đầu từ địa điểm iii sẽ là 1 trong những hoán vị vòng quanh. Sau đó, cùng với mỗi thiến này ta chỉ việc đổi nó sang trọng hệ thập phân lại, rồi lấy hiệu quả lớn độc nhất vô nhị là xong.

Độ phức tạp: O(n2)O(n^2)O(n2) cùng với nnn là độ lâu năm xâu nhị phân sss.

Code mẫu

#include #define int long longusing namespace std;string dec_to_bin(int x) string res; while (x != 0) res = (char) (x % 2 + "0") + res; x /= 2; return res;// Tìm giá trị thập phân của một xâu nhị phân S.int bin_to_dec(string s) int exp = 1, res = 0; for (int i = s.size() - 1; i >= 0; --i) res = res + (s - "0") * exp; exp *= 2; return res;/** * Hàm đo lường và tính toán hai yêu mong của đề bài. * Yêu cầu thứ nhất: Đưa ra trình diễn nhị phân của số X -> sử dụng hàm dec_to_bin(). * Yêu cầu thứ hai: Ta xét đầy đủ hoán vị vòng xung quanh của xâu nhị phân s (là màn trình diễn của x), tiếp nối tìm quý hiếm thập phân lớn nhất trong toàn bộ các hoạn vòng quanh đó. Cách thức xây dựng hoạn vòng xung quanh là gấp hai xâu lên, rồi xét đầy đủ xâu độ dài n (n là độ dài xâu np ban đầu) bắt đầu từ vị trí i (0 void solution(int x) string circular_per = dec_to_bin(x); // hoàn thành yêu ước thứ nhất: In ra biểu diễn nhị phân của x. Cout circular_per endl; // bắt đầu yêu cầu thứ hai, ta nhân đôi xâu nhị phân lên để thực hiện tìm các hoán vị vòng quanh. Int n = circular_per.size(), max_decimal = 0; circular_per += circular_per; for (int i = 0; i n; ++i) max_decimal = max(max_decimal, bin_to_dec(circular_per.substr(i, n))); cout max_decimal;main() ios_base::sync_with_stdio(false); cin.tie(nullptr); int x; cin >> x; solution(x); return 0;V. Tài liệu tham khảo

A.0,1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, EB.0, 1, 2, 3, 4, 5, 6, 7, 8, 9, I, C, D, E, F, GC.1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14D.1, 2, 3, 4, 5, 6, 7, 8, 9, 0, X, C, B, M, V, I, 15, 16
*


*


Toán 10

Toán 10 liên kết Tri Thức

Toán 10 Chân Trời sáng sủa Tạo

Toán 10 Cánh Diều

Giải bài xích tập Toán 10 liên kết Tri Thức

Giải bài tập Toán 10 CTST

Giải bài tập Toán 10 Cánh Diều

Trắc nghiệm Toán 10

Đề thi HK2 môn Toán 10


Ngữ văn 10

Ngữ Văn 10 liên kết Tri Thức

Ngữ Văn 10 Chân Trời sáng sủa Tạo

Ngữ Văn 10 Cánh Diều

Soạn Văn 10 liên kết Tri Thức

Soạn Văn 10 Chân Trời sáng sủa tạo

Soạn Văn 10 Cánh Diều

Văn mẫu mã 10

Đề thi HK2 môn Ngữ Văn 10


Tiếng Anh 10

Giải tiếng Anh 10 kết nối Tri Thức

Giải giờ Anh 10 CTST

Giải tiếng Anh 10 Cánh Diều

Trắc nghiệm giờ đồng hồ Anh 10 KNTT

Trắc nghiệm tiếng Anh 10 CTST

Trắc nghiệm giờ đồng hồ Anh 10 CD

Giải Sách bài bác tập giờ đồng hồ Anh 10

Đề thi HK2 môn giờ Anh 10


Vật lý 10

Vật lý 10 liên kết Tri Thức

Vật lý 10 Chân Trời sáng sủa Tạo

Vật lý 10 Cánh Diều

Giải bài bác tập Lý 10 liên kết Tri Thức

Giải bài bác tập Lý 10 CTST

Giải bài bác tập Lý 10 Cánh Diều

Trắc nghiệm vật dụng Lý 10

Đề thi HK2 môn đồ vật Lý 10


Hoá học tập 10

Hóa học 10 kết nối Tri Thức

Hóa học 10 Chân Trời sáng sủa Tạo

Hóa học tập 10 Cánh Diều

Giải bài xích tập Hóa 10 liên kết Tri Thức

Giải bài bác tập Hóa 10 CTST

Giải bài bác tập Hóa 10 Cánh Diều

Trắc nghiệm Hóa 10

Đề thi HK2 môn Hóa 10


Sinh học tập 10

Sinh học 10 kết nối Tri Thức

Sinh học tập 10 Chân Trời sáng Tạo

Sinh học 10 Cánh Diều

Giải bài bác tập Sinh 10 liên kết Tri Thức

Giải bài bác tập Sinh 10 CTST

Giải bài bác tập Sinh 10 Cánh Diều

Trắc nghiệm Sinh học tập 10

Đề thi HK2 môn Sinh 10


Lịch sử 10

Lịch Sử 10 kết nối Tri Thức

Lịch Sử 10 Chân Trời sáng Tạo

Lịch Sử 10 Cánh Diều

Giải bài bác tập lịch sử vẻ vang 10 KNTT

Giải bài xích tập lịch sử hào hùng 10 CTST

Giải bài bác tập lịch sử hào hùng 10 Cánh Diều

Trắc nghiệm lịch sử 10

Đề thi HK2 môn lịch sử 10


Địa lý 10

Địa Lý 10 kết nối Tri Thức

Địa Lý 10 Chân Trời sáng sủa Tạo

Địa Lý 10 Cánh Diều

Giải bài bác tập Địa Lý 10 KNTT

Giải bài tập Địa Lý 10 CTST

Giải bài xích tập Địa Lý 10 Cánh Diều

Trắc nghiệm Địa lý 10

Đề thi HK2 môn Địa lý 10


GDKT và PL 10

Đề thi HK2 môn GDCD

GDKT và PL 10 liên kết Tri Thức

GDKT và PL 10 Chân Trời sáng sủa Tạo

GDKT và PL 10 Cánh Diều

Giải bài bác tập GDKT & PL 10 KNTT

Giải bài tập GDKT & PL 10 CTST

Giải bài xích tập GDKT và PL 10 CD

Trắc nghiệm GDKT và PL 10

Đề thi HK2 môn GDKT&PL 10


Công nghệ 10

Công nghệ 10 liên kết Tri Thức

Công nghệ 10 Chân Trời sáng sủa Tạo

Công nghệ 10 Cánh Diều

Giải bài tập technology 10 KNTT

Giải bài xích tập công nghệ 10 CTST

Giải bài bác tập technology 10 CD

Trắc nghiệm technology 10

Đề thi HK2 môn technology 10


Tin học 10

Tin học 10 liên kết Tri Thức

Tin học tập 10 Chân Trời sáng sủa Tạo

Tin học 10 Cánh Diều

Giải bài xích tập Tin học tập 10 KNTT

Giải bài xích tập Tin học 10 CTST

Giải bài bác tập Tin học 10 Cánh Diều

Trắc nghiệm Tin học 10

Đề thi HK2 môn Tin học tập 10


Xem các nhất tuần

Đề thi thân HK1 lớp 10

Đề thi thân HK2 lớp 10

Đề thi HK1 lớp 10

Đề thi HK2 lớp 10

Đề cưng cửng HK2 lớp 10

Video bồi dưỡng HSG môn Toán

Toán 10 Kết nối trí thức Bài 1: Mệnh đề

Toán 10 Chân trời sáng tạo Bài 2: Tập hợp

Toán 10 Cánh Diều bài bác tập cuối chương 1

Soạn bài Chữ tín đồ tử tù túng - Nguyễn Tuân - Ngữ văn 10 KNTT

Soạn bài Thần Trụ Trời - Ngữ văn 10 CTST

Soạn bài Ra-ma buộc tội - Ngữ văn 10 Tập 1 Cánh Diều

Văn mẫu mã về Chữ người tử tù

Văn chủng loại về cảm xúc mùa thu (Thu hứng)

Văn mẫu mã về Bình Ngô đại cáo

Văn mẫu mã về Tây Tiến


*

Kết nối với bọn chúng tôi


TẢI ỨNG DỤNG HỌC247

*
*

Thứ 2 - đồ vật 7: từ 08h30 - 21h00

vietpictures.net.vn

Thỏa thuận sử dụng


Đơn vị nhà quản: công ty Cổ Phần giáo dục đào tạo HỌC 247


Chịu trọng trách nội dung: Nguyễn Công Hà - Giám đốc doanh nghiệp CP giáo dục Học 247