#include
#include
/*
编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。
例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , 4)函数返回4
*/
//更相减损法
int fuc(int m,int n)
{
int i=0,temp,x;
while(m%2==0 && n%2==0) //判断m和n能被多少个2整除
{
m/=2;
n/=2;
i+=1;
}
if(m
{
temp=m;
m=n;
n=temp;
}
while(x)
{
x=m-n;
m=(n>x)?n:x;
n=(n
if(n==(m-n))
break;
}
if(i==0)
return n;
else
return (int )pow(2,i)*n;
}
//辗转相除法
int fuc2(int m,int n )
{
int temp;
if(m
{
temp=m;
m=n;
n=temp;
}
while(n!=0) //相除
{
temp=m%n;
m=n;
n=temp;
}
return m;
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("fuc:%d\n",fuc(m,n));
printf("fuc2:%d\n",fuc2(m,n));
return 0;
}
原文:http://blog.csdn.net/a781558066/article/details/44183267