我一直在学习 Ruby,所以我想我会尝试一些项目 Euler 谜题。尴尬的是,我只做了第4题……
问题4如下:
回文数的两种读法都是一样的。由两个 2 位数字的乘积构成的最大回文数是 9009 = 91 × 99。
找出由两个 3 位数字的乘积构成的最大回文数。
所以我想我会在嵌套的 for 循环中从 999 循环到 100 并对回文进行测试,然后当我找到第一个循环(应该是最大的循环)时跳出循环:
final=nil
range = 100...1000
for a in range.to_a.reverse do
for b in range.to_a.reverse do
c=a*b
final=c if c.to_s == c.to_s.reverse
break if !final.nil?
end
break if !final.nil?
end
puts final
这确实输出了一个回文 580085,但显然这不是该范围内两个三位数的最高乘积。奇怪的是,如果我将范围更改为 10...100,则相同的代码成功返回 9009,就像在示例中一样。
- 有人可以告诉我哪里出错了吗?
- 另外,有没有更好的方法来打破内部循环?
谢谢