Ý 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();
}
#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();
}
0 comments:
Post a Comment