我试图反转整数的数字:123456 => 654321
,我能提出的最佳解决方案是123456.to_s.reverse.to_i
。我觉得这是太多的代码。任何人都有比这更好的方法吗?
答案 0 :(得分:4)
这是一个很好的代码高尔夫" -ish回答,而不是我建议用实际代码写的东西......
但你可以通过以下方式减少额外的角色:
123456.to_s.reverse.to_i
123456.digits.join.to_i
编辑:
或者(再次,仅作为代码高尔夫'回答!!)如果您很高兴最终得到String
而不是Integer
,那么可以使用以下方法进行均匀分拣:
123456.digits*'' #=> "654321"
答案 1 :(得分:1)
这是另一种不转换字符串的方法....
x = 12345
y = 0
while x > 0 do
y = y*10
y = y + (x%10)
x = x/10
puts y
end
这个算法也可以在很多采访中被问到....无论你使用哪种语言......这个逻辑都是一样的。 上面的例子使用Ruby
答案 2 :(得分:0)
我们可以在如下对象级别实现此目的。
class Integer
def reverse
number = self
reversed = 0
reversed, number = (reversed*10 + number % 10), number / 10 until number == 0
reversed
end
end
p 1234.reverse => 4321
答案 3 :(得分:0)
我认为通常只有两种方法可以实现这一目标:
1。
n = whatever
result = 0
while n > 0
d, m = n.divmod(10)
result = result * 10 + m
n = d
end
2。转换为str,反向,转换回(您已这样做)。
计算机内存是二进制的,因此它不知道十进制数字(我希望这是正确的词),因此您需要“引入”它们。
答案 4 :(得分:0)
var reverse = function(x) {
let result = 0
while (x) {
result = result * 10 + x % 10
x = x / 10 | 0
}
return Math.abs(result) > 2147483647 ? 0 : result
};
console.log(reverse(-1254))
-4521