C语言求两个数最大公约数的程序

要理解这个示例,您应该了解以下 C 编程 主题


两个整数的HCF或GCD是能整除两个数(无余数)的最大整数。

在C语言编程中,寻找最大公约数(GCD)有很多种方法。

示例 #1:使用for循环和if语句求GCD

#include <stdio.h>
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:使用while循环和if...else语句求GCD

#include <stdio.h>
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相等为止。

上面两个程序只有在用户输入正整数时才能正常工作。下面是对第二个示例进行 little 修改,以查找正负整数的GCD。

示例 #3:正负整数的GCD

#include <stdio.h>
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

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战