iT邦幫忙

2

[自學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:
        break
numbers = 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

 


僅為個人解題筆記,可能有錯誤或未補充詳盡之處,歡迎不吝指教! 也歡迎正在自學的夥伴一起討論學習~共勉之^-^ 感謝閱讀!


1 則留言

1
心原一馬
iT邦研究生 5 級 ‧ 2020-05-10 18:47:00

很棒的分享,參考資料也很淺顯易懂呢 ^^

Pondudu iT邦新手 5 級 ‧ 2020-05-11 12:58:21 檢舉

謝謝小馬哥的鼓勵/images/emoticon/emoticon25.gif

我要留言

立即登入留言