2012-05-24 50 views
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 

$结束

,同样的事情发生

+0

这是一门功课? –

+0

哈哈!有没有教我们红宝石或红宝石的轨道上。对我来说,我试图让它工作 – marios

回答

1

Ruby有一类Integer它有方法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 
+0

作品完美!谢谢 :) – marios