🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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") 。