两个整数的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;
}
在这个程序中,用户输入的两个整数分别存储在变量n1和n2中。然后,for
循环会一直迭代,直到i小于n1和n2。
在每次迭代中,如果n1和n2都能被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的更好方法。在此方法中,将较小的整数从较大的整数中减去,并将结果赋给保存较大整数的变量。此过程一直持续到n1和n2相等为止。
上面两个程序只有在用户输入正整数时才能正常工作。下面是对第二个示例进行 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。