我正在解决一道Codewars的难题,但是有两个测试用例无法通过。
这道题的描述如下:将整数转换为二进制形式。你会得到一个整数作为参数,并需要返回它的二进制形式。如果你不知道如何将十进制数转换为二进制数,请点击这里了解。
注意:负数应该被处理为二进制补码;假设所有数字都是整数,在任何语言中使用4个字节(或32位)存储。
我的代码如下:
测试用例如下:
这道题的描述如下:将整数转换为二进制形式。你会得到一个整数作为参数,并需要返回它的二进制形式。如果你不知道如何将十进制数转换为二进制数,请点击这里了解。
注意:负数应该被处理为二进制补码;假设所有数字都是整数,在任何语言中使用4个字节(或32位)存储。
我的代码如下:
def to_binary(n)
temp_array = []
if n == 0
temp_array << 0
elsif n < 0
n = n % 256
while n > 0 do
temp_array << (n % 2)
n = (n / 2)
end
while temp_array.length < 32 do
temp_array << 1
end
else
while n > 0 do
temp_array << (n % 2)
n = (n / 2)
end
end
binary = temp_array.reverse.join
end
测试用例如下:
Test Passed: Value == "10"
Test Passed: Value == "11"
Test Passed: Value == "100"
Test Passed: Value == "101"
Test Passed: Value == "111"
Test Passed: Value == "1010"
Test Passed: Value == "11111111111111111111111111111101"
Test Passed: Value == "0"
Test Passed: Value == "1111101000"
Test Passed: Value == "11111111111111111111111111110001"
Expected: "11111111111111111111110000011000", instead got: "11111111111111111111111111111000"
Expected: "11111111111100001011110111000001", instead got: "11111111111111111111111111000001"
Test Passed: Value == "11110100001000111111"
我怀疑测试失败是因为负整数,因为第一个失败的测试的预期输出是11111111111111111111110000011000
,这意味着正参数值为4294966296
或者它是负数。如果我运行to_binary(4294966296)
,我得到了预期的输出。
10.to_s(2) => "1010"
。 - aarti(-10).to_s(2) => "-1010"
。 - lurkerto_s(2)
之前对值进行一些操作来解决问题。 - tadman[-10].pack('L').unpack('L')[0].to_s(2)
将给出正确的表示形式 - Anand