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`。需要注意的是,这个函数的'压缩'效果主要取决于数字的原始值和所选择的进制基数,有些情况下可能并不会减少数据的实际长度(例如,非常大的十进制数转换为二进制时)。