说明网
电脑网络 1 个回答

C++中如何实现十进制到任意高进制的转换?

中国玉 提问者

发布于 2026-10-18

问题补充

在C++中实现十进制到任意高进制转换,核心是通过循环取余和整除操作获取每一位的值,并使用自定义字符集将数值映射为对应符号。

1 个回答

按发布时间排序
hnhxlxw 回答者

回答于 2026-10-18

在C++中实现十进制到任意高进制的转换,核心方法是使用短除法(循环取余与整除),并定义一个足够长的字符集来映射高位数值。

实现步骤

  1. 定义字符集:准备一个字符串作为映射表,如"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",可支持最高62进制。若需更高进制,可继续扩展该字符集。
  2. 处理特殊情况:判断输入是否为0或负数,负数需记录符号并对绝对值进行转换。
  3. 循环取余:对十进制数反复执行模运算(% base)得到当前位的索引值,再执行整除(/ base)更新数值,直到商为0。
  4. 逆序拼接:由于先计算出的是低位,需将每次得到的字符插入结果字符串的头部,或在末尾追加后整体反转。

示例代码

#include <iostream>
#include <string>
#include <algorithm>

std::string convertToBase(long long num, int base) {
    if (base < 2 || base > 62) return "Unsupported base";
    const std::string charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    if (num == 0) return "0";
    bool negative = num < 0;
    num = std::abs(num);
    std::string result;
    while (num > 0) {
        result += charset[num % base];
        num /= base;
    }
    if (negative) result += '-';
    std::reverse(result.begin(), result.end());
    return result;
}

适用条件

  • 目标进制不超过所定义字符集的长度。
  • 输入的十进制数在所选数据类型(如long long)的表示范围内。

常见误区

  • 字符集长度不足:请求转换的进制大于字符集长度会导致越界访问。
  • 忽略负数处理:直接对负数取余在不同编译器下行为可能不一致,应先取绝对值。
  • 忘记反转结果:短除法最先得到的是最低位,不反转会导致输出顺序错误。

内容由网友提供,仅供参考。