1

有人可以帮我弄清楚如何在 Ruby 中做到这一点吗?

我有一个整数数组。对于这些整数中的每一个,我需要找到一个两位数长的除数(整数也是如此)。现在,代码正在无限循环。我试图得到的答案是:

int_a = 2, int_b = 11, and x = 22

这是代码:

[22, 33].each do |x| 
  x.to_f
  int_a = 1
  int_b = x.quo(int_a)

     until int_a > 15 || int_b%2==0 && sprintf("%g", int_b).to_s.length == 2 
        puts "#{x}"
        puts "#{int_a}"
        puts "#{int_b}"  
     end  
  int_a += 1
 end
4

2 回答 2

1

我无法理解您的代码,但根据您的定义:

对于这些整数中的每一个,我需要找到一个两位数长的除数(整数也是如此)

试试这个:

numbers = [22,33]
numbers.map do |n|
  raise "invalid number" if n < 10
  div = 10.0
  div += 1 while (n%div) != 0
  div
end
#result: [11,22]
于 2013-03-28T22:06:16.630 回答
0

作为@fotanus,我无法理解您的代码,但是在回答您的问题时,我不久前使用此代码来查找除数:

require 'prime'

def divisors_for(n)
  n.prime_division.map do |n,mp|
    (0..mp).map { |i| n**i }
  end.inject([1]) do |a, factor_group|
    a.product(factor_group)
  end.map do |factors|
    factors.flatten.reduce(:*)
  end - [n]
end

[22, 23].map do |n|
  divisors_for(n).select { |d| d.to_s.size == 2 }
end
于 2013-03-28T22:34:26.830 回答