今天看了学长一段代码真是惊为天人啊。原来他们最大公约数gcd都是这样求的:
#include<stdio.h>
#include<string.h>
#include<math.h>
int gcd(int x,int y)
{
return y? gcd(y,x%y):x;
}
/*这里可以看出如果是x比y小时,x对y取余还是x,x则变为y,只比较一次就相当于交换了位置
可以看出,因为这里用的还是辗转相除法。所以当y为0时可以得到最大公约数,即是此时的x*/
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
int c = gcd(a,b);
printf("最小公倍数为:%d,最大公约数为:%d",a/c*b,c);
return 0;
}
注释是我自己加上去的。。。感觉理解不透啊。还是要精简自己的代码啊。这是我以前求最大公约数的代码
#include<stdio.h>
#include<string.h>
#include<math.h>
int gcd(int n,int m)
{
int t,i,j;
if(n < m)
{
t = n;
n = m;
m = t;
}
while(n % m)
{
t = n % m;
n = m;
m = t;
}
return m;
}
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
printf("最大公约数为:%d",gcd(a,b));
return 0;
}
真是惭愧啊。