30/09/2018, 18:24

Thuật toán chuyển đổi số thập phân rất lớn sang nhị phân

Chào mọi người,
em đang gặp khó khi không chuyển đổi số nguyên lớn(kiểu dữ liệu cơ bản không lưu được) sang nhị phân .Không thể làm kiểu bình thường do em không thề đem cả đống số lớn chia được.Em được biết là còn có thuật toán khác( Cái này hình như là chia theo từng chữ số chứ không chia nguyên cả đống số ) có bạn nào biết thì giúp dùm mình.
Xin cảm ơn các bạn.

Minh Hoàng viết 20:24 ngày 30/09/2018

Để xác định thuật toán thì phải xem kiểu dữ liệu số lớn đó bạn tổ chức như thế nào?
Nếu theo bit thì có thể lấy ra bằng bitwise. Nếu theo linked list thì xây dựng hàm chia

hung222 viết 20:27 ngày 30/09/2018

lấy

mình làm theo bit bạn à.

Minh Hoàng viết 20:26 ngày 30/09/2018

Nhầm, input của bạn là một đoạn string à?

hung222 viết 20:35 ngày 30/09/2018

đúng rồi mình dùng string, Bạn có biết thuật toán nào chuyển đổi mà không cần phải chia hết nguyên cả một dãy số như cái cách cơ bản không?

Killua viết 20:24 ngày 30/09/2018

Chia nguyên cả dãy số mà bạn nói là chia 2 rồi lấy dư đó hả .Mình thì chưa làm cái xử lý số lớn đó nhưng nếu bạn làm với số mà có kiểu dữ liệu lưu đc thì mình nghĩ là nên xử lý theo bit , ko biết là bạn đã làm chưa , mình còn kém nên code có nhiều sai sót cũng như chưa tốt lắm :’( ,mong bạn góp ý thêm

#include <iostream>

using namespace std;

void DTB(int n,int SoBit)
{
  int temp=0;
  int _bit=0;
  switch(SoBit)
  {
  	case 8 : _bit=0x80;break;
  	case 16: _bit=0x8000;break;
  }
  for(int i=0;i<SoBit;i++)
  {
    temp=n;
    temp=temp&(_bit>>i);
    if(temp!=0)
      temp=1;
    cout<<temp;

  }
}

int main()
{
    DTB(65535,16); //  Nếu để 16 thì sẽ hiện 16bit , 8 là 8bit thông thường 
    return 0;
}
hung222 viết 20:40 ngày 30/09/2018

Cảm ơn các bạn rất nhiều. Cuối cùng mình cũng phải đem chia 2( chia bằng chuỗi). Cũng cảm ơn bạn Killua đã cho mình biết thuật toán chuyển nhị phân sang thập phân bằng cách xử lý bit.

Đỗ Đình Hiệp viết 20:32 ngày 30/09/2018

dòng
temp=temp&(_bit>>i);
có nghĩa là sao vậy bạn? giảy thích giùm mình với ạ

HK boy viết 20:38 ngày 30/09/2018

Code này sai thuật toán.

temp=temp&(_bit>>i);

Để hiểu kĩ hơn, bạn tìm hiểu về bitwise trên google.

Đỗ Đình Hiệp viết 20:25 ngày 30/09/2018

Mình hiểu r ạ :3 Cảm ơn bạn

Lê Đức Anh viết 20:28 ngày 30/09/2018

Ngày xưa mình tách từ số rồi dùng if else đó bạn, công nhận code vui tính ghê

Bài liên quan
0