0

私はモデルクラスを作成して、2 つの数値の格子共通除算を見つけようとしています。68 と 22 を入力すると、答えは 2 で正しいですが、678 352 を入力すると、結果は 326 で間違っています。2である必要があります!何か案は??

def gcd 
  if firstnumber > secondnumber
    div= firstnumber/ secondnumber
    ip=firstnumber % secondnumber
    fi = div / ip
    ip
  else 
    i = firstnumber 
    s = secondnumber 
    secondnumber = firstnumber 
    firstnumber = s 
    div= firstnumber/ secondnumber 
    ip=firstnumber % secondnumber 
    fi = div / ip ip 
  end 
end

ループ付き

def gcd
   a = firstnumber
   b=secondnumber
   ip = 50
   if firstnumber > secondnumber
     begin   
       fi=a/b
       re=a%b    
       fi=b/re
       re=re%b
       ip=re        
     end until ip != 0
     return re  
   end
   else
     i = firstnumber
     s = secondnumber
     secondnumber = firstnumber
     firstnumber = s
     div= firstnumber/ secondnumber
     ip=firstnumber % secondnumber
     fi = div / ip
     ip
   end
end

$end

そして同じことが起こる

4

1 に答える 1

1

Ruby にはIntegerメソッドを持つClass がありgcdます。車輪を再発明しないでください。ここを読むhttp://www.ruby-doc.org/core-1.9.3/Integer.html#method-i-gcd

irb(main):001:0> 68.gcd(22)
=> 2
irb(main):002:0> 678.gcd(352)
=> 2

そのメソッドのソースは

   def gcd(n)
     m = self.abs
     n = n.abs

     return n if m == 0
     return m if n == 0

     b = 0
     while n[0] == 0 && m[0] == 0
       b += 1; n >>= 1; m >>= 1
     end
     m >>= 1 while m[0] == 0
     n >>= 1 while n[0] == 0
     while m != n
       m, n = n, m if n > m
       m -= n; m >>= 1 while m[0] == 0
     end
     m << b
   end
于 2012-05-24T17:00:06.157 に答える