我需要这种模式的循环。我需要一个无限循环,产生以1开头的数字。
1,10,11,12..19,100,101,102..199,1000,1001.......
答案 0 :(得分:5)
def numbers_that_start_with_1
return enum_for(:numbers_that_start_with_1) unless block_given?
infty = 1.0 / 0.0
(0..infty).each do |i|
(0 .. 10**i - 1).each do |j|
yield(10**i + j)
end
end
end
numbers_that_start_with_1.first(20)
#=> [1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 100, 101, 102, 103, 104, 105, 106, 107, 108]
答案 1 :(得分:2)
INFINITY = 1.0 / 0.0
0.upto(INFINITY) do |i|
((10**i)...(2*10**i)).each{|e| puts e }
end
当然,我不会运行此代码。
答案 2 :(得分:1)
i = 1
loop do
for j in 0...i
puts i+j
end
i *= 10
end
答案 3 :(得分:0)
调查员对这样的事情很有用。虽然,我很懒,只是决定查看字符串表示是否以1开头,并一次迭代1。这意味着它会很慢,当它从1,999,999跳到10,000,000时会有很大的停顿。
#!/usr/bin/env ruby
start_with_1 = Enumerator.new do|y|
number = 1
loop do
while number.to_s[0] != '1'
number += 1
end
y.yield number
number += 1
end
end
start_with_1.each do|n|
puts n
end
答案 4 :(得分:0)
不是更好,只是不同......
def nbrs_starting_with_one(nbr=1)
(nbr...2*nbr).each {|i| puts i}
nbrs_starting_with_one(10*nbr)
end