给定一个十进制数作为输入,我们需要编写一个程序将给定的十进制数转换为等效的八进制数。即将基值 10 的数字转换为基值 8。数字系统的基值决定了用于表示数值的位数。例如,二进制数系统使用两个数字0和1,八进制数系统使用0-7的8个数字,十进制数系统使用0-9的10个数字来表示任何数值。
例子:
Input : 16 Output: 20 Input : 10 Output: 12 Input : 33 Output: 41
算法:
- 将数字除以 8 时的余数存储在数组中。
- 现在将这个数字除以 8
- 重复以上两步,直到数字不等于0。
- 现在以相反的顺序打印数组。
例如:
如果给定的十进制数是 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 转换为等效八进制数的示例。
下面是上述想法的实现。
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语言 Atoi()用法及代码示例
- C语言 Getchar()用法及代码示例
- C语言 abs()用法及代码示例
- C语言 printf() and scanf()用法及代码示例
- C语言 strchr()用法及代码示例
- C语言 strcpy()用法及代码示例
- C语言 strcat()用法及代码示例
- C语言 宏 assert()用法及代码示例
- C语言 isdigit()用法及代码示例
- C语言 islower()用法及代码示例
- C语言 setlocale()用法及代码示例
- C语言 cos()用法及代码示例
- C语言 cosh()用法及代码示例
- C语言 sin()用法及代码示例
- C语言 sinh()用法及代码示例
- C语言 tanh()用法及代码示例
- C语言 exp()用法及代码示例
- C语言 ldexp()用法及代码示例
- C语言 log()用法及代码示例
- C语言 log10()用法及代码示例
- C语言 pow()用法及代码示例
- C语言 sqrt()用法及代码示例
- C语言 ceil()用法及代码示例
- C语言 fabs()用法及代码示例
- C语言 floor()用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 C Program to Convert Decimal to Octal。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。