C++程序 实现十进制转八进制
给定一个十进制数作为输入,我们需要编写一个程序将给定的十进制数转换为等效的八进制数。即将具有值10的数字转换为具有值8的数字。数字系统的基数确定用于表示数字值的数字数量。例如,二进制数字系统使用两个数字0和1,八进制数字系统使用0-7的8个数字,而十进制数字系统使用10个数字0-9来表示任何数字值。
示例:
输入: 16
输出: 20
输入: 10
输出: 12
输入: 33
输出: 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转换为等效的八进制数。
以下是上述想法的实现。
输出:
时间复杂度:O(log N)
空间复杂度:O(N) ,因为创建包含八进制数字的数组
另一种方法:(O(1)空间复杂度)
也可以使用以下算法在不使用数组的情况下解决此问题:
- 将八进制数字初始化为0,将countVal初始化为1,将十进制数初始化为n
- 找到十进制数除以8的余数
- 通过octalNum +(余数* countval)更新八进制数字
- 通过countval * 10增加countval
- 将十进制数除以8
- 从第二步开始重复,直到十进制数为零
下面是上述想法的实现:
输出:
时间复杂度: O(log N)
辅助空间: O(1)
使用预定义函数
输出: