C++ 十进制数到任意进制数转换算法详解

在计算机科学中,十进制数与其他进制数的转换是一个基本问题。本文将介绍一种简单而有效的算法,使用 C++ 语言实现十进制数到任意进制数 (2 <= d <= 16) 的转换。

算法原理

该算法基于以下原理:

N = (N div d) * d + (N mod d)

其中:

  • N 代表要转换的十进制数。
  • d 代表目标进制。
  • div 表示整除运算。
  • mod 表示求余运算。

代码示例

#include <iostream>
#include <string>

using namespace std;

string decimalToBase(int decimal, int base) {
  string result = '';
  while (decimal > 0) {
    int remainder = decimal % base;
    // 将余数转换为字符,如果是10-15,则使用A-F表示
    char digit = (remainder < 10) ? remainder + '0' : remainder - 10 + 'A';
    result = digit + result; // 将余数添加到结果字符串的最前面
    decimal /= base; // 对十进制数进行整除运算
  }
  return result;
}

int main() {
  int decimal, base;
  cout << '输入十进制数和目标进制 (2 <= 进制 <= 16): ';
  cin >> decimal >> base;
  string result = decimalToBase(decimal, base);
  cout << '转换结果: ' << result << endl;
  return 0;
}

代码解释

  1. 函数 decimalToBase

    • 接收两个参数:十进制数 decimal 和目标进制 base
    • 使用 while 循环不断进行整除和求余操作,直到十进制数为 0。
    • 在每次循环中,将余数转换为字符,并将其添加到结果字符串的最前面。
    • 最后返回结果字符串。
  2. 主函数 main

    • 接收用户输入的十进制数和目标进制。
    • 调用 decimalToBase 函数进行转换,并将结果输出。

样例说明

样例输入: 2018 16

样例输出: 7E2

样例解释:

将 2018 转换为 16 进制数,计算过程如下:

  1. 2018 = (2018 div 16) * 16 + (2018 mod 16) = 126 * 16 + 2
  2. 126 = (126 div 16) * 16 + (126 mod 16) = 7 * 16 + 14
  3. 7 = (7 div 16) * 16 + (7 mod 16) = 0 * 16 + 7

因此,2018 的 16 进制表示为 7E2。

总结

本文详细介绍了使用 C++ 语言实现十进制数到任意进制数的转换算法,并提供代码示例和详细解释。希望本文能够帮助读者更好地理解和应用该算法。

C++ 十进制数到任意进制数转换算法详解

原文地址: https://www.cveoy.top/t/topic/paBS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录