Tboy Cá voi
Tổng số bài gửi : 178 Cảm ơn : 413 Danh vọng : 4 Join date : 03/01/2011 Age : 32 Đến từ : TPHCM
| Tiêu đề: Thập phân sang nhị phân-(Đệ quy) Fri Jan 21, 2011 2:03 am | |
| | Fri Jan 21, 2011 2:03 am Thập phân sang nhị phân-(Đệ quy) | | | Code có dùng con trỏ: - Code:
-
//Doi sang nhi phan #include <stdio.h> #include <alloc.h> #include <conio.h> #define Max 100 void Nhiphan(int N,int *P,int &I); void main() { int n,*p,i=0; p=(int*)malloc(Max*sizeof(int)); do { printf("Nhap vao so thap phan N: "); scanf("%d",&n); }while(n<0); Nhiphan(n,p,i); printf("Doi sang nhi phan: "); for(int j=i;j>=0;j--) printf("%d",*(p+j)); free(p); printf("\n"); getch(); } void Nhiphan(int N,int *P,int &I) { if(N==1) { *(P+I)=1; return; } else if(N==0) { *(P+I)=0; return; } else *(P+I)=N%2; I++; return Nhiphan(N/2,P,I); } Code không dùng con trỏ - Code:
-
//Doi sang nhi phan #include <stdio.h> #include <conio.h> #define Max 100 void Nhiphan(int N,int A[],int &I); void main() { int n,a[Max],i=0; do { printf("Nhap vao so thap phan N: "); scanf("%d",&n); }while(n<0); Nhiphan(n,a,i); printf("Doi sang nhi phan: "); for(int j=i;j>=0;j--) printf("%d",a[j]); printf("\n"); getch(); } void Nhiphan(int N,int A[],int &I) { if(N==1) { A[I]=1; return; } else if(N==0) { A[I]=0; return; } else A[I]=N%2; I++; return Nhiphan(N/2,A,I); } Giải thích: Thuật toán để chuyển từ thập phân sang nhị phân là chia cho 2 và viết ngược lại số dư.Ở đây ý tưởng của mình là trong quá trình chia cho 2 sẽ lưu các số dư vào một mảng A(trong bài mình cho số phần tử tối đa của A là 100, nếu bạn muốn thêm có thể sửa lại), rồi sau đó in ra màn hình ngược lại dãy số đó, tức là với mảng A có n phần tử thì thực hiện in từ phần tử A[n-1] đến A[0]. Bạn có thể dễ dàng nhận ra tính đệ qui của bài toán là thực hiện chia số n bất kì cho 2, sau đó lại lấy kết quả là n/2 chia cho 2 tiếp...như vậy trong hàm Nhiphan(int N,int A[],int &I), ta sẽ gọi lại hàm đó với N/2, và trong thân hàm sẽ có lệnh cho phần tử mảng A bằng số dư tức là A[I]=N%2.Đó là bạn đã tìm được thành phần đệ qui. Bây giờ bạn phải tìm thành phần dừng, xét số n, khi ta thực hiện chia tới tận cùng cho 2, thì được thương là 1, khi đó ta chia 1 cho 2 được kết quả thương là 0 và số dư 1, bài toán kết thúc, nên trong hàm, ta chọn khi n=1 thì cho số dư bằng 1 và thoát hàm; nhưng với trường hợp số 0 thì ta phải cho số dư là 0 rồi thoát hàm, để khi nhập số 0 sẽ in ra màn hình là 0, các số thập phân khác đều thuộc trường hợp đầu. Tất cả các số thập phân khác 0 khi chuyển sang nhị phân đều có chữ số đầu là 1 duy chỉ có số 0 vẫn là 0. Tboy
| | | | |
Được sửa bởi Tboy ngày Tue Jan 25, 2011 7:05 pm; sửa lần 3. |
|
princeofwind_92 Trứng vịt
Tổng số bài gửi : 1 Cảm ơn : 1 Danh vọng : 0 Join date : 20/01/2011
| Tiêu đề: Giải thích!!! Tue Jan 25, 2011 12:43 am | |
| |
|
Tboy Cá voi
Tổng số bài gửi : 178 Cảm ơn : 413 Danh vọng : 4 Join date : 03/01/2011 Age : 32 Đến từ : TPHCM
| Tiêu đề: Re: Thập phân sang nhị phân-(Đệ quy) Tue Jan 25, 2011 7:06 pm | |
| |
|
Sponsored content
| Tiêu đề: Re: Thập phân sang nhị phân-(Đệ quy) | |
| | Re: Thập phân sang nhị phân-(Đệ quy) | | | | | | | | |
|