ok. còn cái ý trên anh??
Bài tập về đổi từ thập phân sang nhị phân
ý 10^i đó à, cái đó tự nghĩ ra đấy chả có mục đích nào đâu ngoài trừ để làm cái phần gán cho cậu.
@@ tự nghĩ ra. thế là nó sẽ đúng với tất cả các số nhị phân @@. impossible
tất nhiên là hầu hết, các số còn lại thì bác tự nghĩ ra kiểu dữ liệu cho nó, ví dụ 1 số bit dài 10000 ký tự thì bác tìm ra đc số 10^10000 nếu có số nào chứa đc
Vì thế nên mới bảo chả ai dùng cách này mà
Rồi cảm ơn bác nhiều…
dùng thuật toán đệ quy cũng gọn lắm
> void dec2bin(int x) > { > if (x!=0) > { > dec2bin(x/2); > printf("%i",x%2); > } > else > printf("0"); > }
cho em thắc mắc, nó gọi lại dec2bin
, vậy cái này có được gọi là đệ quy không nhỉ
Mà kết quả phải đảo ngược dãy số lại mà anh
đây là hàm đệ quy, dữ liệu được lưu vào stack cho tới khi hết đệ quy và xuất ngược lại
ví dụ số 8 trong binary sẽ là 1000.
trong hàm đệ quy có if (x != 0) nghĩa là khi x không chia hế được cho 2 nữa thì sẽ qua else() nghĩa là in ra số 0. và quá trình đệ quy nó sẽ cho ra các két quả sau:
bước kết quả x%2 (chia lấy dư)
1 0; x = 4
2 0; x = 2
3 0; x = 1
4 1; x = 0
trong đệ quy, máy sẽ “xuất ngược”, nghĩa là trong quá trình đệ quy, máy sẽ lần lượt sắp xếp các kết quả vào stack(ngăn xếp) và theo lệ: “cái nào vào sau ra trước”. Vậy nên máy sẽ xuất từ bước 4 trở về bước 1.
thực chất dữ liệu được lưu trong stack là ngược lại với dữ liệu bên trên, nghĩa là bước 4 là bước mới nhất được đưa vào stack, vậy nó sẽ lấy ra đầu tiên
thực chất trong bài trên có mục else, nhưng ta không cần làm gì trong đó cả, vì nếu để 0 thì nó sẽ xuất dư 1 con số 0, con số này không có nghĩa gì nhiều lắm
giải thích đơn giản vậy thôi, còn nếu muốn tìm hiểu sâu hơn thì có thể xem đệ quy và cách đệ quy lưu dữ liệu
à để giải thích lại cái chỗ else tí
cái hàm trên mình viết vội quá nên nó hơi kì cục chỗ else, cơ bản là do nếu không có em ý thì không được( giả sử như x=0)
để viết lại một cái chỉnh chu đỡ kì hơn xí
hàm else thì chỉ cần
else { //khong ghi gi o day }
hay muốn printf thì
else { printf(""); }
đệ quy có thể gọi là cách làm ngắn nhất cho những bài toán thế này
Cmt này hay nè thím breakDown. ^^ cảm ơn thím lần nữa :v
#include
void ConvertToBinary(int n) /Alex says: Good to use unsigned int if u can/
{
if (n / 2 != 0) {
ConvertToBinary(n / 2);
}
printf("%d", n % 2);
}
using namespace std;
int main()
{
int n = 3;
ConvertToBinary(n);
return 0;
}
Nhưng mà nó chỉ tính được một lần, mỗi lần muốn đổi mình phải mở lại hả, có cách nào cho nó tính liên tục được không.
Cho vào vòng while
nhập thôi.
Vậy là bạn đang dùng đoạn code ở post #1
Đầu tiên là bạn đặt hết phần đổi vào một hàm dec2BinToScreen(int)
rồi gọi nó trong cái while(true)
.