11/20/11

[CTDL & Giải Thuật] Biểu diễn số nguyên n trong hệ cơ số b

Đề bài:
Viết một số nguyên n trong hệ cơ số b ( b có thể là 2, 8, 16).

Ý tưởng:
Gọi n' là số trong cơ số b của n. Vì trong n' có khả năng chứa các ký tự chữ cái (trong trường hợp b là hệ 16), nên ta sẽ lưu n' ở dạng xâu ký tự.

Gọi s là xâu ký tự tương ứng của n'. Các ký tự trong s chỉ có thể nằm trong các ký tự số '0', '1' , '2' ... '9' và các ký tự chữ cái 'A', 'B', 'C', 'D', 'E', 'F'. Ta lấy các ký tự này trong xâu c[] = "0123456789ABCDEF".

Ta thực hiện xử lý chuyển đổi n thành s[] như sau:

Bước 1. Kiểm tra nếu n > 0 thì:
- lấy k = n % b ( ví dụ nếu n = 30, b = 16 thì k = n % b = 14), ta lưu ký tự c[k] vào s[].
- lấy n = n / b

Bước 2. Lặp lại bước 1.

....

Tiếp tục như vậy cho đến khi không thỏa mãn n > 0 thì dừng lại.

Kết thúc quá trình ta được xâu s[], ta đảo ngược xâu này được kết quả cần tìm.
View Code:
#include<iostream.h>
#include<conio.h>

void chuyen(int n, int b)
{
   char c[] = "0123456789ABCDEF";//chuoi cho phep
   char s[100]; //Gioi han cua chuoi

   int i = 0, k; s[i] = '0';
   while(n > 0)
   {
      k = n % b;
      s[i] = c[k];
      n = n / b;
      i++;
   }

   cout << "So n trong he " << b << " la: ";
   for(i--; i>= 0; i--)cout << s[i];
}

main()
{
   clrscr();
   int n, b;
   cout << "Nhap n: "; cin >> n;
   cout << "Nhap co so b: "; cin >> b;

   chuyen(n, b);
   getch();
}
Bookmark and Share

0 comments:

Post a Comment

Next previous home

Cộng đồng yêu thiết kế Việt Nam Thiet ke website, danang