Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ chuyển đổi Số bát phân thành Số thập phân và ngược lại

Trong hệ thống máy tính, số bát phân được biểu thị trong hệ thống chữ số bát phân trong khi số thập phân nằm trong hệ thống chữ số thập phân. Số bát phân ở cơ số 8 trong khi số thập phân ở cơ số 10.

Ví dụ về số thập phân và số bát phân tương ứng của chúng như sau.

Số thập phân Số bát phân
10 12
70 106
25 31
16 20

Một chương trình chuyển đổi các số bát phân thành thập phân và các số thập phân thành bát phân như sau -

Ví dụ

#include <iostream>
#include <cmath>
using namespace std;
void DecimalToOctal(int decimalNum) {
   int octalNum = 0, placeValue = 1;
   int dNo = decimalNum;
   while (decimalNum != 0) {
      octalNum += (decimalNum % 8) * placeValue;
      decimalNum /= 8;
      placeValue *= 10;
   }
cout<<"Octal form of decimal number "<<dNo<<" is "<<octalNum<<endl;
}
void OctalToDecimal(int octalNum) {
   int decimalNum = 0, power = 0;
   int oNo = octalNum;
   while(octalNum != 0) {
      decimalNum += (octalNum%10) * pow(8,power);
      ++power;
      octalNum/=10;
   }
   cout<<"Decimal form of octal number "<<oNo<<" is "<<decimalNum<<endl;
}
int main() {
   DecimalToOctal(20);
   OctalToDecimal(32);
   return 0;
}

Đầu ra

Octal form of decimal number 20 is 24
Decimal form of octal number 32 is 26

Trong chương trình trên, hàm DecimalToOctal chuyển đổi số thập phân thành bát phân và hàm OctalToDecimal chuyển đổi số bát phân thành số thập phân.

Trong hàm DecimalToOctal, ban đầu biến octalNum được khởi tạo bằng 0. Biến placeValue biểu thị vị trí của chữ số trong số. Giá trị của octalNum được tìm thấy bằng cách sử dụng vòng lặp while.

Đối với mỗi lần lặp của vòng lặp while, decimalNum được chia cho 8 và phần còn lại được nhân với placeValue. Giá trị này được thêm vào giá trị trước đó của octalNum. Ngoài ra decimalNum được chia cho 8 và thương được lưu lại. placeValue được nhân với 10.

Đoạn mã chứng minh điều này như sau.

while (decimalNum != 0) {
   octalNum += (decimalNum % 8) * placeValue;
   decimalNum /= 8;
   placeValue *= 10;
}

Sau khi giá trị Octal, tức là octalNum được xóa, nó sẽ được hiển thị. Điều này được đưa ra dưới đây -

cout<<"Octal form of decimal number "<<dNo<<" is "<<octalNum<<endl;

Trong hàm OctalToDecimal, trong mỗi lần lặp của vòng lặp while, octalNum được chia cho 8 và phần còn lại được nhân với 8 được nâng lên thành lũy thừa. Giá trị này được thêm vào giá trị trước đó của decimalNum. Power được tăng thêm 1 và octalNum được chia cho 10. Điều này được thể hiện như sau.

while(octalNum != 0) {
   decimalNum += (octalNum%10) * pow(8,power);
   ++power;
   octalNum/=10;
}

Sau khi giá trị của decimalNum được tìm thấy, nó sẽ được hiển thị. Điều này được nhìn thấy như sau.

cout<<"Decimal form of octal number "<<oNo<<" is "<<decimalNum<<endl;

Hàm main () chỉ chứa các lệnh gọi hàm đến DecimalToOctal () và OctalToDecimal () với các giá trị bắt buộc. Điều này được chứng minh bằng đoạn mã sau.

DecimalToOctal(20);
OctalToDecimal(32);