# C 程序：查找两个数字的 GCD

> 原文： [https://www.programiz.com/c-programming/examples/hcf-gcd](https://www.programiz.com/c-programming/examples/hcf-gcd)

#### 使用循环和决策语句以不同方式计算两个整数（正整数和负整数）的 GCD 的示例。

要理解此示例，您应该了解以下 [C 编程](/c-programming "C tutorial")主题：

*   [C 编程运算符](/c-programming/c-operators)
*   [C `for`循环](/c-programming/c-for-loop)
*   [C `if...else`语句](/c-programming/c-if-else-statement)
*   [C `while`和`do...while`循环](/c-programming/c-do-while-loops)

* * *

两个整数的 HCF 或 GCD 是可以完全除以两个数（没有余数）的最大整数。

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

## 例 1：使用`for`循环和`if`语句的 GCD 

```c
#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("GCD of %d and %d is %d", n1, n2, gcd);

    return 0;
}

```

在该程序中，用户输入的两个整数存储在变量`n1`和`n2`中。然后，迭代`for`循环，直到`i`小于[ `n1`和`n2`。

在每次迭代中，如果`n1`和`n2`都可被`i`完全整除，则`i`的值将分配给`gcd`。

当`for`循环完成时，两个数字的最大公约数将存储在变量`gcd`中。

## 示例 2：使用`while`循环和`if...else`语句的 GCD 

```c
#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;
}
```

**输出**

```c
Enter two positive integers: 81
153
GCD = 9
```

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

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

## 例 3：正负数的 GCD

```c
#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;
}
```

**输出**

```c
Enter two integers: 81
-153
GCD = 9
```

您也可以使用[递归找到 GCD](/c-programming/examples/hcf-recursion "GCD using recursion") 。