利用进制转换压缩数字函数分享



def compress_number(num, base=10):
    """
    压缩数字:将给定数字从十进制转换为任意进制的字符串表示。
    这里的'压缩'更多是一种表述,实际上是将数字转换为一个可能更短的字符串表示,
    如果采用的进制基数(base)较高且数字在该进制下有很多重复的零,则结果可能不会显得更短。

    :param num: 要压缩的数字(整数)
    :param base: 目标进制基数,默认为10(十进制),可以指定为2-36之间的整数
    :return: 转换后的字符串
    """
    if base < 2 or base > 36:
        raise ValueError("进制基数必须在2到36之间")
    # 使用内置函数format来进行进制转换
    # '{:x}' 表示十六进制,'{:o}' 表示八进制,'{:b}' 表示二进制
    # 使用'{}'.format(num, base)需要自定义实现或使用库函数
    # 这里为了简洁和通用性,采用直接构建字符串的方式
    digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    if num == 0:
        return '0'
    result = ''
    while num > 0:
        result = digits[num % base] + result
        num //= base
    return result

# 示例
print(compress_number(255, 16))  # 输出: ff
print(compress_number(1023, 2))  # 输出: 1111111111

这个函数接受一个整数`num`和一个进制基数`base`,将`num`从十进制转换为指定的`base`进制,并返回转换后的字符串。这里为了支持超过10的进制(即需要字母来表示更高位的数字),我们定义了一个包含所有可能字符的字符串`digits`。需要注意的是,这个函数的'压缩'效果主要取决于数字的原始值和所选择的进制基数,有些情况下可能并不会减少数据的实际长度(例如,非常大的十进制数转换为二进制时)。