C++程式:八進位制數與十進位制數的相互轉換


在計算機系統中,八進位制數以八進位制數系統表示,而十進位制數以十進位制數系統表示。八進位制數是基數為8的數,而十進位制數是基數為10的數。

十進位制數及其對應的八進位制數示例如下所示。

十進位制數八進位制數
1012
70106
2531
1620

將八進位制數轉換為十進位制數,並將十進位制數轉換為八進位制數的程式如下所示:

示例

線上演示

#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;
}

輸出

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

在上述程式中,`DecimalToOctal` 函式將十進位制數轉換為八進位制數,`OctalToDecimal` 函式將八進位制數轉換為十進位制數。

在 `DecimalToOctal` 函式中,變數 `octalNum` 最初初始化為零。變數 `placeValue` 表示數字中數字的位置。`octalNum` 的值使用 while 迴圈找到。

對於 while 迴圈的每次迭代,`decimalNum` 除以 8,餘數乘以 `placeValue`。將其新增到 `octalNum` 的前一個值。`decimalNum` 也除以 8,並將商儲存回去。`placeValue` 乘以 10。

演示此功能的程式碼片段如下所示。

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

獲得八進位制值(即 `octalNum`)後,將其顯示出來。如下所示:

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

在 `OctalToDecimal` 函式中,在 while 迴圈的每次迭代中,`octalNum` 除以 8,餘數乘以 8 的冪。將其新增到 `decimalNum` 的前一個值。冪增加 1,`octalNum` 除以 10。如下所示:

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

找到 `decimalNum` 的值後,將其顯示出來。如下所示:

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

`main()` 函式僅包含對 `DecimalToOctal()` 和 `OctalToDecimal()` 函式的呼叫,並帶有所需的值。如下面的程式碼片段所示。

DecimalToOctal(20);
OctalToDecimal(32);

更新於:2020年6月24日

526 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.