C++程序 实现十进制转八进制

C++程序 实现十进制转八进制

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

示例:

输入: 16
输出: 20

输入: 10
输出: 12

输入: 33
输出: 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转换为等效的八进制数。

C++程序 实现十进制转八进制

以下是上述想法的实现。

// 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程