我如何使用动态内存分配将小数转换为八进制

How can I use dynamic memory allocation for converting decimal to octal?

本文关键字:小数 转换 八进制 分配 何使用 动态 内存      更新时间:2023-10-16

我写了两个代码。这个不起作用,因为它向后写代码。

void convertNum1(long a) {
    while (a!=0) {
        long remainder = 0;
        remainder = a % 8;
        a /= 8;
        cout << remainder;
    }
    cout << endl;
}

我写了此代码,因为第一个代码不起作用。基本上,我的想法是用元素填充数组,然后向后计数。

void convertNum2(long a) {
    long *pointer = NULL;
    int k = 1;
    long c = a;
    while (c != 0) {
        c/= 8;
        k++;
    }
    pointer = new long[k];
    int rem;
    for (int j = 0;j<k;j++) {
        rem = a / 8;
        *(pointer + j) = rem;
    }
    for (int j = k; j > 0;j--) {
        cout << *(pointer + j);
    }
    delete []pointer;
}

我建议使用stack。将八进制数字推到堆栈上,然后将它们弹出(它们将以正确的顺序)。

btw,您总是可以作弊并使用std::oct I/O操纵器

std::string Dec_To_Oct(unsigned long number)
{
  static const char octal_char_digits[] = "01234567";
  std::stack<char>  octal_number;
  while (number > 0U)
  {
    octal_digit = number % 8;
    const char d = octal_char_digits[octal_digit];
    octal_number.push(d);
    number = number / 8;
  }
  std::string octal_text;
  while (!octal_number.empty())
  {
     const char d = octal_number.top();
     octal_text += d;
     octal_number.pop();
  }
  return octal_text;
}