当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 Decimal转Octal用法及代码示例


给定一个十进制数作为输入,我们需要编写一个程序将给定的十进制数转换为等效的八进制数。即将基值 10 的数字转换为基值 8。数字系统的基值决定了用于表示数值的位数。例如,二进制数系统使用两个数字0和1,八进制数系统使用0-7的8个数字,十进制数系统使用0-9的10个数字来表示任何数值。

例子:

Input : 16
Output: 20

Input : 10
Output: 12

Input : 33
Output: 41

算法:

  1. 将数字除以 8 时的余数存储在数组中。
  2. 现在将这个数字除以 8
  3. 重复以上两步,直到数字不等于0。
  4. 现在以相反的顺序打印数组。

例如:

如果给定的十进制数是 16。

步骤1:16 除以 8 余数为 0,因此 arr[0] = 0。
第2步:将 16 除以 8。新数字为 16/8 = 2。
步骤3:2除以8的余数为2。因此,arr[1] = 2。
步骤4:2除以8。新数字是2/8 = 0。
步骤5:由于数字变为 = 0。

停止重复步骤并以相反的顺序打印数组。因此,等效的八进制数是20。

下图显示了将十进制数 33 转换为等效八进制数的示例。

decToOctal

下面是上述想法的实现。

C


// C program to convert decimal 
// number to octal number 
#include <stdio.h> 
  
// function to convert decimal to octal 
void decToOctal(int n) 
{ 
  
    // array to store octal number 
    int octalNum[100]; 
  
    // counter for octal number array 
    int i = 0; 
    while (n != 0) { 
  
        // storing remainder in octal array 
        octalNum[i] = n % 8; 
        n = n / 8; 
        i++; 
    } 
  
    // printing octal number array in reverse order 
    for (int j = i - 1; j >= 0; j--) 
        printf("%d", octalNum[j]); 
} 
  
// Driver Code 
int main() 
{ 
    int n = 33; 
  
    // Function Call 
    decToOctal(n); 
  
    return 0; 
}
输出
41

时间复杂度:O(logN)

空间复杂度:O(N),因为创建数组来存储八进制数

另一种方法:(O(1) 空间复杂度)

不使用数组也可以使用以下算法解决此问题:

  • 将八进制 num 初始化为 0,将 countVal 初始化为 1,将十进制数初始化为 n
  • 求小数除以 8 的余数
  • 通过 OctalNum + (余数 * countval) 更新八进制数
  • 将 countval 增加 countval*10
  • 小数除以 8
  • 从第二步开始重复,直到小数为零

下面是上述想法的实现:

C


// C program to convert decimal 
// number to octal number 
#include <stdio.h> 
  
// function to calculate the octal value of the given 
// decimal number 
void decimaltoOctal(int deciNum) 
{ 
  
    int octalNum = 0, countval = 1; 
    int dNo = deciNum; 
  
    while (deciNum != 0) { 
        // decimals remainder is calculated 
        int remainder = deciNum % 8; 
  
        // storing the octalvalue 
        octalNum += remainder * countval; 
  
        // storing exponential value 
        countval = countval * 10; 
        deciNum /= 8; 
    } 
    printf("%d", octalNum); 
} 
  
// Driver Code 
int main() 
{ 
    int n = 33; 
  
    // Function Call 
    decimaltoOctal(n); 
    return 0; 
}
输出
41

时间复杂度:O(logN)

辅助空间:O(1)



相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 C Program to Convert Decimal to Octal。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。