题解 | #最大公约数#

最大公约数

http://www.nowcoder.com/practice/cf4091ca75ca47958182dae85369c82c

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 求出a、b的最大公约数。
 * @param a int 
 * @param b int 
 * @return int
 */
int gcd(int a, int b ) 
{
    int c;
    while(1)
    {
        c=a%b;
        if(c==0)
        {
            return b;
            break;
        }
        a=b;
        b=c;
        
    }
}

/**与学校最大的不同是没有scanf这些输入输出函数,取而代之是return;
   这道题先看了一下解析,发现是欧几里得算法即辗转相除法,这不禁让我想起一句话“数学是万物的基础”,仔细看了看,数学上证解的步骤很复杂,难怪计算机算法陷入停滞,但是由于计算能力的提高,古今很多问题需要暴力解开,比如让欧拉“栽”了猜想,即a的n次方等于b的n次方加上c的n次方,所有的符合数均为质数。
   这里主要是while(1),原因是我们不关心循环几次,再者是判断是前于数值替换,比较满意这个算法,缺点未知。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务