[英]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.