Ruby到_的二进制参数转换错误
我试图解决一个需要二进制操作的黑客问题。测试用例是非常庞大的数字,所以我认为最好将它们作为字符串处理Ruby到_的二进制参数转换错误,ruby,Ruby,我试图解决一个需要二进制操作的黑客问题。测试用例是非常庞大的数字,所以我认为最好将它们作为字符串处理 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"
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方法从不接受任何参数
所以你应该把(n2=n)改为(2)改为
我认为您正在尝试将Ruby中的数字转换为二进制表示的字符串。这在以下情况下是可能的(如果数字实际上是Ruby中的数字,例如Fixnum): 但是在您的例子中,调用
get
后得到的是一个字符串,string类的to_s
方法只返回它自己,不接受任何参数,因此出现了错误
您可以通过调用gets.to_i
而不仅仅是gets
来修复它,因此读取的内容字符串将在Ruby中转换为整数(您应该确保在那里只读取数字)
我相信您正在尝试将n
的二进制表示(作为字符串)赋给变量n2
,因为您应该这样做
n2 = n.to_s(2)
如果你只是这样做:
(n2=n).to_s
由于有括号,首先将n2
赋值为n
,然后在n2
上调用to_s
,将返回n2
的字符串版本,并且不会发生任何其他情况。你应该做的第一件事是转换,然后是作业
调用string#count时还应该传入一个字符串,也就是说,你应该调用
n2.count('2')
,而不是n2.count(2)
,我认为我们不接受任何参数。这个代码应该做什么?@MuhammadYawarAli:整数#到
(或者更准确地说,和的对)接受可选的base
参数,该参数告诉它要在哪个库中打印数字。默认值为10
。感谢所有试图帮助我的人。我不明白的是,我得到的输入n是一个数字,n2基本上是n。那么类型应该是fixnum no?如果它是一个fixnum,为什么to.s在5.to_s(2)这样的情况下不工作?@sawa刚才不在,但我已经编辑了一点这个问题。。。该程序应该计算谁是最终的赢家。它从一个数字开始(非常大),如果这个数字不是2的幂,则减去下一个最大的2的幂。否则,将其减半。Integer#to_s
(或者更准确地说,and对)接受一个可选的base
参数,告诉它要在哪个基数中打印数字。默认值是10
。但是如果我将其更改为(n2=n)。要知道程序如何知道我要将其更改为基数2?@idkwhatamidoing:get
是“get string”的缩写。你认为它会返回什么?:)所以get
实际上将输入作为字符串?谢谢,这真的很有帮助!另外,count()
不是预定义的方法吗?我得到了一个未定义的方法错误,原因是count()
@SergioTulentsev哇哦,是的,我没想到。是否无法直接将输入作为整数获取?抱歉,我太习惯使用强类型的语言了。@IDKwatamioung:任何具有强类型的语言都不会“直接”得到整数。控制台输入本质上是文本。您所能做的就是在得到字符串时解释它(解析为整数或其他形式)
n2 = n.to_s(2)
(n2=n).to_s