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 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--)
cout << octalNum[j];
}
// Driver Code
int 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