Lập trình C - Chuyển đổi hệ cơ số

Chuyển đổi hệ cơ số trong C

Bài toán

1. Chuyển đổi số nguyên N từ hệ cơ số 10 sang hệ cơ số B bất kỳ. 
2. Chuyển đổi hệ cơ số B sang hệ cơ số 10 bất kỳ.


Cách chuyển đổi hệ cơ số

  • Chuyển đối hệ cơ số 10 sang hệ cơ số B
  • Chuyển đối hệ cơ số B sang hệ cơ số 10

Chuyển đối hệ cơ số 10 sang hệ cơ số B

Cách chuyển đổi số nguyên N từ hệ cơ số 10 sang hệ cơ số 2, trong ảnh dưới đây là ví dụ chuyển số 15 và số 6 sang hệ cơ số 2:

  1. Gán m = 15.
  2. Put phần dư m chia cho 2 (m % 2) vào stack.
  3. Gán m = m / 2.
  4. Nếu m > 0 quay lại bước 2.
  5. Đảo ngược lại stack ta được số cần tính.

Chuyển đổi hệ cơ số trong C

Các hệ số khác chuyển đổi tương tự.


Ví dụ chuyển đối hệ cơ số 10 sang hệ cơ số B

Giả sử hệ cơ số cần chuyển là 2 <= B <= 16. Số đại điện cho hệ cơ số B > 10 là A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.

Chúng ta tạo ra một chương trình như sau để chuyển đổi hệ cơ số trong C:

/**
 * Chuong trinh chuyen doi he co so trong C
 * Bai tap nay su dung bang ASCII de chuyen doi so nguyen thanh kieu ky tu
 * Link tham khao: https://vi.wikipedia.org/wiki/ASCII
 
 */

#include<stdio.h>

const char CHAR_55 = 55;
const char CHAR_48 = 48;

/**
 * chuyen doi so nguyen n sang he co so b
 * 
 * @author viettuts.vn
 * @param n: so nguyen
 * @param b: he co so
 */
int convertNumber(int n, int b) {
    if (n < 0 || b < 2 || b > 16 ) {
        printf("He co so hoac gia tri chuyen doi khong hop le!");
        return 0;
    }
    int i;
    char arr[20];
    int count = 0;
    int m;
    int remainder = n;
    while (remainder > 0) {
        if (b > 10) {
            m = remainder % b;
            if (m >= 10) {
                arr[count] = (char) (m + CHAR_55);
                count++;
            } else {
                arr[count] = (char) (m + CHAR_48);
                count++;
            }
        } else {
            arr[count] = (char) ((remainder % b) + CHAR_48);
            count++;
        }
        remainder = remainder / b;
    }
    // hien thi he co so
    for (i = count - 1; i >= 0; i--) {
        printf("%c", arr[i]);
    }
    return 1;
}

/**
 * Ham main
 */
int main() {
    int n = 12;
    printf("So %d trong he co so 2 = ", n);
    convertNumber(n, 2);
    printf("\nSo %d trong he co so 16 = ", n);
	convertNumber(n, 16);
    return 1;
}

Kết quả:

So 12 trong he co so 2 = 1100
So 12 trong he co so 16 = C

Chuyển đối hệ cơ số B sang hệ cơ số 10

Trong ảnh dưới đây là ví dụ về chuyển đổi hệ cơ số 2 sang hệ cơ số 10.

Chuyển đổi hệ cơ số trong C

Các hệ cơ số khác tương tự.