CTDL và giải thuật - Chuyển số n sang nhi phân
Bài tập.
Nhập vào một số nguyên dương n
.
Hãy chuyển n
thành mã nhị phân và in chuỗi đó ra màn hình.
Ví dụ:
- Test mẫu 1:
Input OutPut 13
1101
Vớin = 13
thìstackBin(n) ="1101"
.
Giải thích:(1101)2 = 13
.
- Test mẫu 2:
Input Output 3
11
Vớin = 3
thìstackBin(n) ="11"
.
Hướng dẫn bài tập:
Để 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ư của phép chia đó 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:
Ngôn ngữ C++:
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack<char> st;
int n;
cin >> n;
while(n > 0){
st.push(n%2+'0');
n /= 2;
}
while(!st.empty()){
cout << st.top();
st.pop();
}
return 0;
}