30/09/2018, 18:35

Cách đổi hệ nhị phân sang thập lục phân?

Đây là code của mình, giải hoài không ra mong mọi người chỉ bảo

      #include <iostream>
      #include <cstring>
      using namespace std;
      main()
     {
char a[] = "0123456789ABCDEF";
char b[] = "111101111";
int n = 8, i, j, temp = 0, h[20], m = 0;
cout << "strlen(b) = " << strlen(b) << endl;
for(i = strlen(b) - 1; i > 0; i = i - 4)
	{
		for(j = i - 3; j <= i; j++)
		{
			if(b[j] == '1')
			{
				temp = temp + n;
				n = n / 2;
			}
			else
				n = n / 2;
		}	
		cout << a[temp] << endl;	
	}
   }
*grab popcorn* viết 20:40 ngày 30/09/2018

Bạn quên khởi tạo lại n = 8 rồi
Thì sau vòng lặp đầu tiên, n không bằng 8 nữa nên kq tính temp bị sai. Bạn phải gán n = 8 một lại ở trước for(j=…) là đc

Minh Vương viết 20:40 ngày 30/09/2018

Mình cũng vừa có suy nghĩ như vậy, nhưng ghi vào vẫn không ra không hiểu sai chỗ nào

*grab popcorn* viết 20:43 ngày 30/09/2018

Thiếu temp = 0 cùng chỗ với n = 8. và i chạy tới 0 là ok
Nhưng có vẻ kq in ra bị ngược

Minh Vương viết 20:42 ngày 30/09/2018

mình xài đếm đảo lại được, nhưng ý bạn nói mình vẫn chưa hiểu phải sữa chỗ nào
chỗ i chay tới 0

*grab popcorn* viết 20:47 ngày 30/09/2018

temp bạn gán = temp + n
Thì khi chạy lại vòng lặp, giá trị của temp vẫn như cũ. Tức chưa được gán lại bằng không. NÊn nó cứ cộng dồn vô từ đó bạn không in ra đúng kq được
Và cái vòng for (i=… i>=0) chứ ko phải i > 0 thôi

Gió viết 20:51 ngày 30/09/2018
#include <iostream>
      #include <cstring>
      using namespace std;
      main()
     {
char a[] = "0123456789ABCDEF";
char b[] = "111101111";

cout << "strlen(b) = " << strlen(b) << endl;
for(int i = strlen(b) - 1; i >= 0; i = i - 4)
    {
        int j=i,pow2=1;
        int t=0;
        while(j>=i-3 and j>=0){
            t+=(b[j]-'0')*pow2;
            pow2*=2;
            j--;
        }
        cout<<a[t]<<endl;
    }
}
Minh Vương viết 20:37 ngày 30/09/2018

rs lại temp = 0; thì nó ra kq là 0 0 0 hết r bạn ơi

Minh Vương viết 20:37 ngày 30/09/2018

dùng theo code của mình thì phải sữa như thế nào v

*grab popcorn* viết 20:44 ngày 30/09/2018

http://ideone.com/X3PoUn ‘3’

Minh Vương viết 20:45 ngày 30/09/2018

okay thanks bạn , nhưng chắc phải kêu = anh, cảm ơn anh em sn 96 à hihi

Minh Vương viết 20:42 ngày 30/09/2018

cảm ơn anh Gió hihi

Gió viết 20:50 ngày 30/09/2018

for(j = i - 3; j <= i; j++)
sửa thành for(j=max(0,i-3);j<=i;j++) tránh j<0

  • khi j không bắt đầu từ i-3 thì n cũng không bắt đầu từ 8 dc
Minh Vương viết 20:41 ngày 30/09/2018

Cảm ơn anh!!

Bài liên quan
0