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转换为等效的八进制数。

以下是上述想法的实现。
// C++ program to convert a decimal// number to octal number#include <iostream>using namespace std;// Function to convert decimal // to octalvoid 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--) cout << octalNum[j];}// Driver Codeint main(){ int n = 33; // Function Call decToOctal(n); return 0;}输出:
41
时间复杂度:O(log N)
空间复杂度:O(N) ,因为创建包含八进制数字的数组
另一种方法:(O(1)空间复杂度)
也可以使用以下算法在不使用数组的情况下解决此问题:
将八进制数字初始化为0,将countVal初始化为1,将十进制数初始化为n找到十进制数除以8的余数通过octalNum +(余数* countval)更新八进制数字通过countval * 10增加countval将十进制数除以8从第二步开始重复,直到十进制数为零下面是上述想法的实现:
// C++程序,将十进制数转换成八进制数#include <iostream>using namespace std; // 计算给定十进制数的八进制值的函数void decimaltoOctal(int deciNum){ // 初始化 int octalNum = 0, countval = 1; int dNo = deciNum; while (deciNum != 0) { // 计算十进制数的余数 int remainder = deciNum % 8; // 存储八进制值 octalNum += remainder * countval; // 存储指数值 countval = countval * 10; deciNum /= 8; } cout << octalNum << endl;} // 主函数int main(){ int n = 33; // 调用函数 decimaltoOctal(n); return 0;} 输出:
41
时间复杂度: O(log N)
辅助空间: O(1)
使用预定义函数
// C++程序,实现上述方法#include <bits/stdc++.h>using namespace std; string intToOctal(int n){ stringstream st; st << oct << n; return st.str();} // 主函数int main(){ int n = 43; cout << intToOctal(n); return 0;} 输出:
41
