Thứ Hai, 12 tháng 6, 2017

Đổi sang hệ cơ số 10 sang hệ cơ số 2 và 16 dùng Stack trong C++

Lập trình C++  

Đổi sang hệ cơ số 10 sang hệ cơ số 2 và 16 dùng Stack trong C++

Ý Tưởng :
  1. Đổi hệ số 10 sang hệ số 2 :
    • Như chúng ta đã biết thì để đổi số thập phân sang nhị phân thì chúng ta chia số đó cho 2 và lấy phần dư, sau đó chỉ cần đọc ngược dãy số phần dư là được. Dựa vào tư tưởng đó và việc bản chất của Stack (Hàng đợi) đó là vào trước thì ra sau,nên chúng ta chỉ cần tách dữ liệu và đọc stack là được :

           // code by hieptran
            void XuLyCoSo2(ListStack &L, int n) {
             int p = 0;
             while (n != 0)
             {
              p = n % 2;
              Them(L, p);
              n /= 2;
             }
      
  2. Đổi hệ số 10 sang hệ số 16
    • Cũng tương tự như ý tưởng của cơ số hai, thì cơ số 16 chúng ta chỉ cần chia cho 16 và lấy phần dư nhưng , có một điều đáng lưu ý ở đây đó là cơ số 16 thì có cả chữ và nó có các ký tự là '0123456789ABCDEF'. Nhưng chữ thì trong mã máy nó cũng hiểu là số thôi, nên ta chỉ cần đổi số đó sang kiểu char và in lên màn hình là ok , chúng ta cùng xem code minh họa :

          
        //code by hieptran
      
            void XuLyCoSo16(ListStack &L, int n) { 
             int ks = 0;
             while (n !=  0)
             {
              ks = n % 16;
              Them(L, ks);
              n /= 16;
             }
            }
      
            // sau đây là hàm để in ra màn hình cơ số 16
            void XuatHe16(ListStack L) {
              while (L != NULL)
              {
               if (L->data = 0)
               {
                cout next;
               }
               else
               {
                printf("%c", L->data + 55);
                L = L->next;
               }
              }
              cout << endl;
             }
      
      
Dưới đây là full code để các bạn có thể tham khảo
 
// code by hieptran
 #include  
 #include 

 using namespace std;

 struct Stack
 {
  int data;
  Stack *next;
 };

 typedef Stack *ListStack;

 void Init(ListStack &L) {
  L = NULL;
 }

 Stack *MakeNode(int x) {
  Stack *s = (Stack *)malloc(sizeof(Stack));
  s->data = x;
  s->next = NULL;
  return s;
 }

 void Them(ListStack &L, int x) {
  Stack *k = NULL;
  k = MakeNode(x);
  k->next = L;
  L = k;
 }

 void XuLyCoSo2(ListStack &L, int n) {
  int p = 0;
  while (n != 0)
  {
   p = n % 2;
   Them(L, p);
   n /= 2;
  }
 }

 void XuLyCoSo16(ListStack &L, int n) {
  int ks = 0;
  while (n !=  0)
  {
   ks = n % 16;
   Them(L, ks);
   n /= 16;
  }
 }

 void XuatHe16(ListStack L) {
  while (L != NULL)
  {
   if (L->data <= 9 && L >= 0)
   {
    cout << L->data;
    L = L->next;
   }
   else
   {
    printf("%c", L->data + 55);
    L = L->next;
   }
  }
  cout << endl;
 }
 void Xuat(ListStack L) {
  while (L != NULL)
  {
   cout << L->data << endl;     L = L->next;
  }
 }

 int main() {
  ListStack L;
  Init(L);
  XuLyCoSo16(L, 3295);
  XuatHe16(L);
  system("pause");
  return 0;
 }
  
Chúc bạn thành công
Share:

Related Posts:

0 nhận xét:

Đăng nhận xét