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;	
	}
   }

Bạn quên khởi tạo lại n = 8 rồi :smile:
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 :blush:

1 Like

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 :joy:

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

1 Like

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 :joy:
chỗ i chay tới 0

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 :stuck_out_tongue:
Và cái vòng for (i=… i>=0) chứ ko phải i > 0 thôi

1 Like
#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;
    }
}
2 Likes

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

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

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

2 Likes

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

cảm ơn anh Gió hihi :heart_eyes:

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
2 Likes

Cảm ơn anh!! :relaxed:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?