Bài tập

Chuyển đổi giữa cơ số 10 và cơ số 8

Huy Erick

Chuyển đổi giữa các cơ số là một quy trình quan trọng mà chúng ta thường gặp trong lập trình và toán học. Trong bài viết này, chúng ta sẽ tìm hiểu cách chuyển đổi...

Chuyển đổi giữa các cơ số là một quy trình quan trọng mà chúng ta thường gặp trong lập trình và toán học. Trong bài viết này, chúng ta sẽ tìm hiểu cách chuyển đổi giữa cơ số 10 và cơ số 8. Bài viết sẽ giới thiệu các bước chi tiết và cung cấp các ví dụ để minh họa quy trình này.

Chuyển từ cơ số 10 sang cơ số 8

Chuyển cơ số 10 sang cơ số 8

Quá trình chuyển đổi từ cơ số 10 sang cơ số 8 tương tự như cách chuyển đổi từ thập phân sang nhị phân. Để thực hiện quá trình này, chúng ta cần lưu lại kết quả của phép chia dư số thập phân cho 8, sau đó tiếp tục chia cho 8. Quá trình được lặp lại cho đến khi số cần chuyển đổi nhỏ hơn 1.

Ví dụ: Chuyển số 2764 (ở hệ thập phân) sang hệ bát phân.

  • 2764 chia cho 8 = 345.5 (345 là phần nguyên, dư 4)
  • 345 chia cho 8 = 43.125 (43 là phần nguyên, dư 1)
  • 43 chia cho 8 = 5.375 (5 là phần nguyên, dư 3)
  • 5 chia cho 8 = 0 (dư 5)

Như vậy, để chuyển số 2764 sang hệ bát phân, chúng ta đảo ngược các số dư từ cuối lên đầu, tức là 2746(10) = 5314(8).

Dưới đây là một đoạn mã ví dụ sử dụng ngăn xếp để chuyển đổi từ cơ số 10 sang cơ số 8.

#include 
#include 

std::stack Dec2Oct(int num, int base){
    std::stack oct;
    while(num > 1){
        oct.push(num % base);
        num /= base;
    }
    return oct;
}

int main(){
    int n;
    printf("Nhập số ở cơ số 10 cần chuyển: ");
    scanf("%d", &n);
    printf("Số %d ở cơ số 8 là: ", n);
    std::stack oct = Dec2Oct(n, 8);
    while(!oct.empty()){
        printf("%d", oct.top());
        oct.pop();
    }
}

Đoạn mã trên cho phép chúng ta chuyển từ cơ số 10 sang một hệ cơ số bất kỳ, không chỉ là cơ số 8. Nếu bạn không muốn sử dụng ngăn xếp, bạn có thể thử cách sử dụng vector như trong đoạn mã dưới đây.

#include 
#include 
#include 

std::vector Dec2Oct(int num){
    std::vector oct;
    while(num > 1){
        oct.push_back(num % 8);
        num = num / 8;
    }
    return oct;
}

int main(){
    int n;
    printf("Nhập số ở cơ số 10 cần chuyển: ");
    scanf("%d", &n);
    printf("Số %d ở cơ số 8 là: ", n);
    std::vector oct = Dec2Oct(n);
    for(int i = oct.size() - 1; i >= 0; -i){
        printf("%d", oct[i]);
    }
}

Chuyển từ cơ số 8 sang cơ số 10

Cách chuyển cơ số 8 sang cơ số 10

Quá trình chuyển từ cơ số 8 sang cơ số 10 rất đơn giản. Chúng ta chỉ cần nhân tổng của các chữ số hàng đơn vị ở cơ số 8 với 8^0, các chữ số hàng chục nhân với 8^1, và tiếp tục như vậy. Kết quả chính là số ở cơ số 10 tương ứng.

Ví dụ: Đổi 2764(8) sang cơ số 10, ta thực hiện như sau:

  • 2764(8) = 48^0 + 68^1 + 78^2 + 28^3 = 1524(10).

Bạn có thể kiểm tra kết quả bằng cách chuyển ngược lại từ cơ số 8 sang cơ số 10 sử dụng đoạn mã ở trên.

Dưới đây là một đoạn mã ví dụ sử dụng vector để chuyển từ cơ số 8 sang cơ số 10.

#include 
#include 
#include 

std::vector Dec2Oct(int num){
    std::vector oct;
    while(num > 1){
        oct.push_back(num % 8);
        num = num / 8;
    }
    return oct;
}

int Oct2Dec(std::vector oct){
    int val = 0;
    int len = oct.size();
    int p = 0;
    for(int i = 0; i  len; ++i){
        val = val + oct[i] * pow(8, p);
        p = p + 1;
    }
    return val;
}

int main(){
    int n;
    printf("Nhập số ở cơ số 10 cần chuyển: ");
    scanf("%d", &n);
    printf("Số %d ở cơ số 8 là: ", n);
    std::vector oct = Dec2Oct(n);
    for(int i = oct.size() - 1; i >= 0; -i){
        printf("%d", oct[i]);
    }
    printf("\n");
    printf("Chuyển ngược về cơ số 10 = %d", Oct2Dec(oct));
}

Hy vọng qua bài viết này, bạn đã hiểu cách chuyển đổi giữa cơ số 10 và cơ số 8. Bạn có thể áp dụng quy trình này để chuyển đổi giữa các cơ số khác nhau và làm việc với các hệ cơ số trong lập trình và toán học.

1