今天分享个稍微难点的算法-gcd
// temp = b; b = a%b; a = temp;
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int gcd(int a, int b)
{
return b ? gcd(b, a%b) : a;
}
int main()
{
int a, b;
printf("please input the a and b:");
scanf("%d %d",&a,&b);
printf("%d\n",gcd(a,b));
system("pause");
return 0;
}
求两个数的最大公约数虽然代码不多,但是思想还是较为复杂的,为什么要这么写,我也是理解了其他人所说的辗转相除这么个思想来解决的,首先如果x和y都能被y整除,那么他们的线性组合mx+ny也一定能被整除,记住这个,然后就好办了,设x和y两个数的余数为c,x/y=n余c,则可变换为x=ny+c,ny移到左边则x-ny=c则为x,y的线性组合则余数c也可以被z整除,就这样每次递归的思想,不断求两个数里的较小数和余数的最大公约数,直到余数为0时,a即为最大公约数。