📜  C程序查找两个数字的GCD

📅  最后修改于: 2020-10-04 11:27:37             🧑  作者: Mango

使用循环和决策语句来计算两个整数(正整数和负整数)的GCD的不同方法的示例。

两个整数的HCF或GCD是可以精确地将两个数相除(没有余数)的最大整数。

找到C编程中最大公约数的方法有很多。

例1:GCD使用for循环和if语句
#include 
int main()
{
    int n1, n2, i, gcd;

    printf("Enter two integers: ");
    scanf("%d %d", &n1, &n2);

    for(i=1; i <= n1 && i <= n2; ++i)
    {
        // Checks if i is factor of both integers
        if(n1%i==0 && n2%i==0)
            gcd = i;
    }

    printf("G.C.D of %d and %d is %d", n1, n2, gcd);

    return 0;
}

在此程序中,用户输入的两个整数存储在变量n1n2中 。然后,迭代for直到直到i小于n1n2

在每次迭代中,如果两个n1n2是用i整除,i的值被分配给GCD。

for循环完成时,两个数字的最大公约数存储在变量gcd中

示例2:GCD使用while循环和if … else语句
#include 
int main()
{
    int n1, n2;
    
    printf("Enter two positive integers: ");
    scanf("%d %d",&n1,&n2);

    while(n1!=n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
    printf("GCD = %d",n1);

    return 0;
}

输出

Enter two positive integers: 81
153
GCD = 9

这是查找GCD的更好方法。在此方法中,从较大的整数中减去较小的整数,然后将结果分配给保存较大整数的变量。继续该过程,直到n1n2相等。

仅当用户输入正整数时,以上两个程序才能按预期工作。这是第二个示例的一些修改,可以找到正整数和负整数的GCD。

例3:正负数均为GCD
#include 
int main()
{
    int n1, n2;

    printf("Enter two integers: ");
    scanf("%d %d",&n1,&n2);

    // if user enters negative number, sign of the number is changed to positive
    n1 = ( n1 > 0) ? n1 : -n1;
    n2 = ( n2 > 0) ? n2 : -n2;

    while(n1!=n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
    printf("GCD = %d",n1);

    return 0;
}

输出

Enter two integers: 81
-153
GCD = 9

您还可以使用递归来查找GCD。