如何将自然数转二进制时输出的c1值整合为整数并反转?
解决方案
针对你的需求,这里提供两种简单易懂的实现方式,适合编程初学者:
方法一:用字符串收集并反转(直观易理解)
原代码中每次输出的c1是二进制数的低位到高位,我们可以先把这些数字存到字符串里,最后反转字符串再转成整数,就能得到正确的二进制数:
Main_Input = int(input()) binary_digits = "" # 初始化空字符串,用来存储二进制位 while Main_Input > 0: c1 = Main_Input % 2 Main_Input = Main_Input // 2 binary_digits += str(c1) # 将当前二进制位转成字符串追加进去 # 处理输入为0的情况(自然数包含0),反转字符串后转成整数 final_binary = int(binary_digits[::-1]) if binary_digits else 0 print(final_binary)
步骤说明:
- 定义空字符串
binary_digits,用来逐个存储每次计算出的二进制位; - 循环中把
c1转成字符串,拼接到binary_digits末尾,循环结束后它会是"低位在前、高位在后"的字符序列; - 用
[::-1]反转字符串,得到正确的二进制顺序,再转成整数; - 增加输入为0的判断,避免空字符串转整数报错。
方法二:直接用整数构建(无需反转)
通过计算数位权重,直接把每个二进制位放到对应的位置上,不需要反转:
Main_Input = int(input()) final_binary = 0 digit_position = 0 # 记录当前二进制位的权重(10的n次方) while Main_Input > 0: c1 = Main_Input % 2 Main_Input = Main_Input // 2 # 把当前位放到对应的数位上:比如第0位乘10^0,第1位乘10^1 final_binary += c1 * (10 ** digit_position) digit_position += 1 print(final_binary)
步骤说明:
- 初始化
final_binary为0,digit_position记录当前位的权重(从0开始,对应10的0次方); - 每次计算出
c1后,用c1 * (10 ** digit_position)将其放到对应的数位上,累加到final_binary中; - 每循环一次,数位权重加1,确保下一个二进制位放到更高的位置。
内容的提问来源于stack exchange,提问作者Mohammad Payandeh
相关产品推荐
相关产品推荐

