簡體   English   中英

Ruby to_s轉換為二進制參數錯誤

[英]Ruby to_s conversion to binary argument error

我試圖解決需要二進制處理的HackerRank問題。 測試用例非常龐大,因此我認為最好將它們作為字符串進行操作。

t=gets
def winner(pturn)
  if a%2==0 
    puts "Richard\n"
  else 
    puts "Louise\n"
  end
end            

while t != 0
    turn=1
    n=gets
    (n2=n).to_s(2)
    while n!=1
        one="1"
        zero="0"
        if n2.count(1)>1
            zero*=(n2.length - 2)
            one.concat(zero)
            n-=one.to_i(base=2)
        else
            n/=2
        end
     turn+=1
     end 
winner(turn)
t-=1
end

如下所示,它在一行中導致了一個參數錯誤(參數數量錯誤)。

(n2=n).to_s(2)

我認為我錯誤地使用了to_s 我看不到錯誤,需要有人指出。

我認為您正在嘗試將Ruby中的數字轉換為其二進制表示形式的字符串。 這是可能的(如果數字實際上是Ruby中的數字,例如Fixnum):

4.to_s 2
# => "100"

但是在您的情況下,調用gets之后gets是一個字符串,而String類的to_s方法只是返回自身,並且不接受任何參數,因此會出現錯誤。

您可以通過調用gets.to_i而不是gets來修復它,因此讀取的內容字符串將在Ruby中轉換為整數(您應該確保只在此處讀取數字)。

我相信你想的分配二進制表示(字符串) n到變量n2 ,對於自己應該做的

n2 = n.to_s(2)

如果您只是這樣做:

(n2=n).to_s

因為括號的,第一n2將被分配的值n ,然后to_s將在名為n2 ,串版本n2將被退回,並沒有什么事情發生。 您應該做的第一件事是轉換,然后是賦值。

而且,您還應該在調用String#count時傳遞一個字符串,即您應該調用n2.count('2')而不是n2.count(2)

參數錯誤即將到來,因為您試圖將參數傳遞給to_s方法,因為to_s方法從不接受任何參數。

所以你應該將(n2 = n).to_s(2)更改為

(n2=n).to_s

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM