将八进制转换为十进制的方法指南

250 阅读5分钟

在这篇文章中,我们将解决一个名为将八进制转换为十进制的问题。这是一个非常基本的计算机科学问题,涉及到数字系统中的基数和转换的概念。

目录:

  1. 问题陈述的介绍
  2. 八进制的属性
  3. 八进制到十进制的转换规则
  4. 追踪几个例子
  5. 用C++实现解决方案
  6. C++代码的解释
  7. 时间和空间的复杂性

问题陈述的介绍

在这个问题中,给出了一个数字的八进制形式,我们必须将八进制形式转换为十进制形式。
例子:像八进制形式的数字=30(这是给出的)

转换为十进制后,我们得到的数字=18

      Input : 30  //octal
      Output : 18  //decimal
      
      Input: 214  //octal 
      Output: 140  //decimal
      
      Input: 1732  //octal
      Output: 986   //decimal        

八进制的属性

首先,我们将看到,什么是八进制数?

八进制数字系统是以8为基数表示数字的形式之一。这意味着八进制数的表示只包括前8个数字,即0、1、2、3、4、5、6、7。

但在十进制表示法中,我们用所有10个数字表示,即0,1,2,3,4,5,6,7,8,9。

八进制的数字用基数8表示。例如:(24)基数(8)等。

前10个数字的八进制和十进制形式是:

Decimal       Octal
    0           0
    1           1
    2           2
    3           3
    4           4
    5           5
    6           6
    7           7
    8           10
    9           11
    10          12

八进制到十进制的转换规则

要将八进制形式转换为十进制形式,应遵循以下规则:

  1. 将数字的每个数字与8的增幂相乘(从0开始到数字-1,即8^0, 8^1, 8^2, 8^3, 8^4, ......, 8^(数字-1))从右边开始。

  2. 将得到的所有倍数相加。

  3. 所得之和是该八进制数字的十进制形式。

追踪几个例子

#示例1
输入: 214 /八进制形式
输出:140 /十进制形式

解释:214
4*(8^0) =*41 = 4
1
*(8^1) =*18 = 8
2
*
(8^2) = 2*64 = 128

            Sum= 4 + 8 + 128 = 140
            => The Decimal representation of the 214 = 140

##样本2
输入:1732 /八进制形式
输出:986 /十进制形式

解释:1732
2*(8^0) =*21 = 2
3
*(8^1) =*38 = 24
7
(8^2) = 764= 448
1
*
(8^3) = 1*512 = 512

            Sum= 2 + 24 + 448 + 512  =  986
            => The Decimal representation of the 1732 = 986

##样本3
输入:179 //八字形
输出:无效输入

解释。我们知道,任何数字的八进制表示法只包含前八个数字,即0、1、2、3、4、5、6、7。但是输入的数字包含一个数字9,这个数字不应该在八进制表示法中。所以,给定的输入是无效的。

#例子4
输入:81 /八进制形式
输出:无效输入

解释:在示例3中解释了。

用C++实现解决方案

为了实现八进制到十进制的转换,我们将使用C++实现:

> 1     #include <iostream>
> 2     using namespace std;
> 3     
> 4     
> 5     int ConvertOctaltoDecimal ( int octal ) {
> 6          int decimal = 0 , position =0 ;
> 7          while ( octal > 0 ) {
> 8               int temp = octal % 10 ;
> 9               decimal = decimal + temp * pow( 8 , position );
> 10              octal = octal / 10 ;
> 11              position = position + 1 ;
> 12          }
> 13          return decimal ;
> 14     }
> 15     
> 16     
> 17    int CheckOctal ( int octal ) {
> 18          while ( octal > 0 ) {
> 19              int temp = octal % 10 ;
> 20              if ( temp == 8 || temp ==9 ) {
> 21                   return 0 ;
> 22              }
> 23              octal = octal / 10 ;
> 24         }
> 25         return 1;
> 26    }
> 27    
> 28    
> 29    
> 30    int main() {
> 31         int octal;
> 32         cin >> octal;
> 33        
> 34        int check = 0 ;
> 35        check = CheckOctal ( octal );
> 36        if( check == 0 ){
> 37             cout << "Invalid Input" ;
> 38        }
> 39        else {
> 40             int decimal = 0;
> 41             decimal = ConvertOctaltoDecimal ( octal ) ;
> 42             cout << decimal ; 
> 43        }
> 44        return 0 ;
> 45   }
> 46    

C++代码的解释

第1-2行包括所需的库

第30-45行
在第31行定义一个数字,在第32行我们输入八进制数字,我们必须将其转换为十进制。如果它是无效的,正如在样本3和样本4中讨论的那样,我们打印无效输入
否则(从第39-42行)如果它是一个可能的八进制数,那么我们通过使用函数ConvertOctaltoDecimal

其转换为十进制数,并打印给定八进制数的十进制形式。
第17-26行
函数检查是否可能是八进制数。在一个while循环中,对于每个数字,如果是8或9,则检查它是否是8或9。然后,返回0。如果不是,则继续循环并检查下一个数字。如果没有检测到8或9的数字,那么最后返回1表示可能。

第5-14行
ConvertOctaltoDecimal函数将八进制数转换成十进制数。在第6行,十进制计算最终的十进制数,位置检测从0开始的数字的位置。在while循环中,每次temp计算八进制的最后一位数字,最后我们用temp和8的幂相加,如在sample-1, sample-2中讨论的那样。最后,我们用八进制除以10,这样每次我们都会得到temp作为下一个数字。我们把位置增加1,这样我们下次就可以用更高的8次方进行乘法。

时间和空间复杂度

让n=数字的八进制数字数。

所写的C++代码的时间复杂度为O( n ),
空间复杂度为O( 1 )。

在ConvertOctaltoDecimal和CheckOctal函数中,我们运行一个while循环,在这两个函数中运行n次。
在最坏和最好的情况下,时间复杂度将是O( n )。

在整个代码中,我们只定义了int,而没有定义数组或其他需要固定空间的数据结构。因此,在所有情况下,空间复杂度都是O( 1 )。

通过OpenGenus的这篇文章,你一定对如何将八进制转换为十进制有了完整的了解。