【GESP】C++三级模拟题 luogu-B3849 [GESP样题 三级] 进制转换

### GESP 三级 进制转换 样题解法 对于GESP三级中的进制转换题目,尤其是涉及二进制与八进制之间的相互转换以及处理小数的情况,可以采用特定的方法来解决这些问题。 #### 整数部分的转换 当面对整数部分从一种基数到另一种基数的转换时,通常会使用除基取余法。例如,在十进制转为其他较低基数的过程中,不断将给定数值除以目标基数,并记录每次相除后的余数作为新表示的一部分[^4]。 ```python def decimal_to_base(n, base): result = "" while n > 0: remainder = n % base result += str(remainder) n //= base return result[::-1] or "0" ``` #### 小数部分的转换 针对含有小数点的数据进行不同进制间的变换,则需分开考虑其整数和分数两个方面: - 对于整数部分按照上述方式进行操作; - 而对于小于1的小数部分则应乘以其对应的基数直到满足精度要求为止,期间收集所得积中超过单位的部分形成新的序列[^1]。 ```python def fraction_to_base(fraction, base, precision=5): result = [] count = 0 while fraction != 0 and count < precision: product = fraction * base integer_part = int(product) if integer_part >= base: break result.append(str(integer_part)) fraction = product - integer_part count += 1 return '.' + ''.join(result) # 组合函数用于同时处理整数和小数部分 def convert_with_fraction(number_str, target_base): parts = number_str.split('.') whole_number = int(parts[0]) fractional_part = float('0.' + (parts[1] if len(parts)>1 else '')) converted_whole = decimal_to_base(abs(whole_number), target_base) converted_fractional = fraction_to_base(fractional_part, target_base) sign = '-' if whole_number<0 else '' return f"{sign}{converted_whole}{converted_fractional}" ``` 此代码片段展示了如何实现带小数点的任意进制间转换的功能。需要注意的是,这里假设输入字符串形式的有效浮点数,并且只支持有限长度的小数位输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值