【发布时间】:2016-04-06 06:24:47
【问题描述】:
我试图解决需要二进制操作的 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。我看不到错误,需要有人指出。
【问题讨论】:
-
我认为 to_s 不接受任何参数。
-
这段代码应该做什么?
-
@MuhammadYawarAli:
Integer#to_s(或者更准确地说,Bignum#to_s和Fixnum#to_s对)接受一个可选的base参数,告诉它您要在哪个基数中打印数字。默认值为10。 -
感谢所有试图帮助我的人。我不明白的是我得到的 n 的输入是一个数字,而 n2 基本上是 n。所以类型应该是一个fixnum no?如果它是一个固定编号,为什么 to.s 在适用于 5.to_s(2) 之类的东西时不起作用?
-
@sawa 刚刚不在,但我已经稍微编辑了问题...该程序应该计算谁是最终的赢家。它以一个数字(非常大)开始,如果该数字不是 2 的幂,则减去下一个最大的 2 幂。否则,将其减半。
标签: ruby