憋了一天,最终写出来了的求最大公约数的程序(C)

来源:互联网 发布:linux 断点续传 编辑:程序博客网 时间:2024/06/04 08:18

前天晚上遇到一题,编写程序求出最大公因数(最大公约数),本能的我想起来了数学中求最大公因式的方法,可是在程序实践上

明显的出了问题,两个数要一个一个的进行拆解,然后找到相同的,这根本是一条死路,思索一夜醒来,突然迸发灵感,可以

用两个数进行取余运算,如果余数为零则最大公因数为被除数,不为零则余数为最大公约数,恩,就是这个思路,简单的数据还行,但是遇到15和25之后就出现了问题,按上面思路那么公约数为10,可是实际为5,继续思考,可以用15对10进行取余,yes!就是这们办。

但是问题又出现了,两次可以三次呢?我根本无法预知到底要用几次,所以加个循环。ok。

这是一条漫长的过程,我的时间耗费在那个上面了。所以附加我的程序以表:

/**************************************************
 * Name: gcd.c
 * Purpose: Great comman divisor
 * Author: zimo
 * Date: 01/23/2010
 * ***********************************************/

#include<stdio.h>

int main(void)
{
    int divisor, dividend, result;

    printf("Enter two integers:");
    scanf("%d, %d", &divisor, &dividend);

        if(divisor == 0)
        {
                printf("Greatest common divisor: %d /n",dividend);
        }
        else if(dividend == 0)
        {
                printf("Geratest common divisor: %d /n", divisor);
        }
        else if(divisor >= dividend)
    {
        while(divisor % dividend != 0)
        {
            result = divisor % dividend;
            divisor = dividend;
            dividend = result;
        }
        printf("Greatest common divisor: %d /n",dividend);
    }
    else
    {
        while(dividend % divisor != 0)
        {
            result = dividend % divisor;
            dividend = divisor;
            divisor = result;
        }
        printf("Greatest common divisor: %d /n", divisor);
    }

    return 0;
}