code nay rất khó hiểu, theo mình nghỉ là bạn nên thử làm cách khác xem sao. Riêng cai biến tong là char ma bạn lại cho nó lam size của mảng mình đã thấy khá khó hiểu.
đây la code of mình:
khi chạy thì mã nhị phân không đúng,giúp mình tìm ra nguyên nhân với...Code:#include<stdio.h> //chuyen doi so nhi phan int main() { int a,b,d,dem1; char c,tong; printf("nhap so\n"); scanf("%d",&b);d=b; if(b>=0) { tong=1; while(b>=2){b=b/2;tong =tong+1;} int A[tong]; for(dem1 =0;dem1<tong;dem1++){A[dem1]=d%2;d=d/2;} for(dem1 =0;dem1<tong;dem1++){printf("%d",A[tong-dem1]);} } }
code nay rất khó hiểu, theo mình nghỉ là bạn nên thử làm cách khác xem sao. Riêng cai biến tong là char ma bạn lại cho nó lam size của mảng mình đã thấy khá khó hiểu.
Code của bạn bị sai 2 nơi. tong bạn để kiểu char thì ko thể có chuyện tong+1 được. Nên để lại kiểu in cho nó. Thứ 2 là trong vòng lặp for để in kết quả : trong trường hợp này thì "tong - dem1" lại chính bằng "tong". Không tồn tại A[tong-dem1] . Nên sửa lị trong vòng lặp for hoặc trừ đi 1 như sau A[tong-dem1] sửa lại thành A[tong-dem1-1].
Bạn định cấp phát động cho mảng a, tùy vào kích thước của tổng. Không cấp phát được như cách của bạn đâu!
C Code:
#include <conio.h> #include <stdio.h> int main(){ char *_="%c%c%c%c%c%c%c%c%c%c%c%c%c%c";int __=3**_+5; getch();return 0;}
cái này mình sửa theo ý của bạn chứ mình thấy làm một cái stack là tốt nhất
Code:#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<malloc.h> void DectoBin(int*& a,int n) { int tong; tong=0; int n1=n; a=(int*)malloc(tong*sizeof(int)); do { n1=n%2; n=n/2; tong++; realloc(a,tong*sizeof(int)); a[tong-1]=n1; } while (n>0); Xuat(a,tong); } void Xuat(int*a,int n) { int i; for(i=n-1;i>=0;i--) printf("%2d",a[i]); } int main() { int* a, n; printf("\n Nhap n: "); scanf("%d",&n); printf("\n so nhi phan cua %d: ",n); DectoBin(a,n); system("pause"); return 0; }
I'll come back
truyền giá trị bằng *& hình như ko phải là C chuẩn thì phải.
ý của bạn là chuyển đổi từ số hệ 10 sang hệ số thập phân, mình có code "đơn giản" như thế này:
Dùng stack có sẵn trong thư viện chuẩn.
Code:#include <iostream> #include <conio.h> #include <stack> using namespace std; int main() { int n; stack<int> MyStack; cin>>n; while(n>0) { MyStack.push(n%2); n/=2; }; while(!MyStack.empty()) { cout<<MyStack.top(); MyStack.pop(); } getch(); return 0; }
Note: Với số nguyên không âm, d & 1 tương đương với d % 2; d >>= 1 tương đương với d /= 2. Mình quen viết kiểu này vì phép dịch bit chạy nhanh hơn phép chiaC Code:
cám ơn mọi người.cách dịch bit rất hay.thanks