Đổi hệ 10 sang hệ 2

em k hiểu được vì sao em chạy sai nữa, mong anh chị giải thích giúp em.

#include <iostream>
using namespace std;
int main (){
int sonho,i=1,kqua=0,n;
cin>>n;
	do{
	sonho=n%2;
	kqua=kqua+(i*sonho);
	n=(n-sonho)/2;
	i*=10;
    }while(n>0);
    cout<<kqua;
    return 0;
}
1 Like

theo hàm của bạn mình hiểu ý tưởng của bạn là qua mỗi lần chia có thể dư 0 hoặc 1.
-> lấy kết quả đó, dựa vào phép nhân thập phân để dịch chuyển con trỏ, qua đó sẽ được chuỗi giống chuỗi bit nhưng là số thập phân.
error–> hàm của bạn sai ở chỗ để dịch chuyển đúng bạn cần nhân với 10 mũ,
solution–> phép nhân thứ 0 (đầu tiên) ta ghi kết quả tại vị trí 10^0 là hàng đơn vị,
tiếp tục hàng chục, hàng trăm, hàng ngàn,…
warning–> ý tưởng khá hay nhưng sẽ nhanh chóng tràn bộ nhớ vì số cần lưu kqua vượt qua khả năng của int.
recommend–> bạn nên làm với mảng, mỗi lần chia thì đẩy vào mảng số dư; hoặc dùng hẳn phép nối chuỗi.

4 Likes

Các số nằm ngoài hệ thập phân thì hầu hết được chuyển thành chuỗi (mảng kí tự).

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