
[Cpp-STL] Stack5
Bài tập.
Cho một số nguyên dương n
.
Hãy chuyển n
thành mã nhị phân.
Ví dụ:
- Với
n = 13
thìstackBin(n) ="1101"
.
Giải thích:(1101)2 = 13
. - Với
n = 3
thìstackBin(n) ="11"
.
Hướng dẫn:
Để chuyển một số nguyên dương n về hệ nhị phân ta làm như sau:
Trong khi n > 0
thì ta lấy n
chia cho 2
và lưu số dư đó lại. Cứ làm vậy đến khi nào n = 0
thì dừng lại.
Kết quả cần tìm chính là danh sách các số dư được đọc ngược lại, ta sẽ nghĩ ngay đến việc sùng stack để lưu các số dư này, sau đó chỉ cần in ra stack là được.
Ví dụ n = 13
: thì quy trình biến đổi như sau:
- Khởi tạo
st = []
- Với
n = 13
, lấy13
chia2
được6
dư1
, lưu1
và st,st = [1].
- với
n = 6
, lấy6
chia2
được3
dư0
, lưu0
và st,st = [1,0].
- với
n = 3
, lấy3
chia2
được1
dư1
, lưu0
vàst
,st = [1,0,1].
- Với
n = 1
, lấy1
chia2
được0
dư1
, lưu1
vàst
,st = [1,0,1,1].
- Với
n =0
, ta dừng lại và in ra stackst
.
Code mẫu:
std::string stackBin(int n)
{
string s;
stack<char> st;
while(n > 0){
st.push(n%2+'0');
n /= 2;
}
while(!st.empty()){
s = s + st.top();
st.pop();
}
return s;
}
Post Comment