Day 10: Binary Numbers (二进制)
题目要求输入一整数n
并转换为二进制,并打印连续出现1的最大次数。
输入样本
5
输出样本
1
(因为5的二进制为101
,所以连续出现1的最大次数=1)
我的解答
n = int(input())numbers = bin(n)[2:].split('0') #因为转换完前两个字为'0b',所以从第三个数字开始lenghts = [len(i) for i in numbers] #取每个元素的数量储存成列表print(max(lenghts))
如果将每个阶段印出,以n=13为例,会长酱:
bin(13) = '0b1101' #整数经过bin()之后会转换成字串类型
numbers = ['11', '1'] #以0分隔,便会将连续的1分成一个个元素
lenghts = [2, 1]
max(lenghts) = 2
如果不用bin(),尝试用四则运算解:
n = int(input())numbers = ''while True: a = n // 2 b = n % 2 numbers += str(b) n = a if n == 0: breaknumbers = numbers.split('0')lenghts = [len(i) for i in numbers]print(max(lenghts))
相关练习题
【高中生 - a034: 二进位制转换】
输入:
输入若干行直到 EOF (end of the file)为止。每一行包含一个十进位的整数。例:3
6
输出:
针对每一行的整数输出其二进位制的结果。例:11
110
我的解答(修正后)
def transToBinary(n): #函数功能: 吃一个十进位的数字,回传一个二进位表示的字串 num = [] while True: a = n // 2 b = n % 2 num += [str(b)] n = a if n == 0: break return ''.join(num[::-1])while True: try: n = int(input()) print(transToBinary(n)) except: break
REF 【进制转换 (二进制、八进制、十进制、十六进制)】
仅为个人解题笔记,可能有错误或未补充详尽之处,欢迎不吝指教! 也欢迎正在自学的伙伴一起讨论学习~共勉之^-^ 感谢阅读!