[自学Python纪录] HackerRank 新手30天挑战-Day10

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 【进制转换 (二进制、八进制、十进制、十六进制)】

仅为个人解题笔记,可能有错误或未补充详尽之处,欢迎不吝指教! 也欢迎正在自学的伙伴一起讨论学习~共勉之^-^ 感谢阅读!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章