反转整数位数

时间:2013-12-10 08:27:22

标签: ruby

我试图反转整数的数字:123456 => 654321,我能提出的最佳解决方案是123456.to_s.reverse.to_i。我觉得这是太多的代码。任何人都有比这更好的方法吗?

5 个答案:

答案 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)

JavaScript中整数的反向数字

解决方案

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