用循环解决
1、编写递归函数求两个正整数a
和b
的最大公约数(GCD,Greatest Common Divisor),使用Euclid算法:
-
如果
a
除以b
能整除,则最大公约数是b
。 -
否则,最大公约数等于
b
和a%b
的最大公约数。
Euclid算法是很容易证明的,请读者自己证明一下为什么这么算就能算出最大公约数。最后,修改你的程序使之适用于所有整数,而不仅仅是正整数。
/************************************
使用循环求GCD
*************************************/
#include<stdio.h>
int main()
{
int m,n,a,b,c;
printf ( "please enter two number:" );
scanf ( "%d %d",&m,&n );
if ( m*n == 0 )
{
printf ( "The number you enter can't be 0!\n" );
return 0;
}
if ( m<0 )
{
a=-m;
}
else a=m;
if ( n<0 )
{
b=-n;
}
else b=n;
while ( a%b != 0 )
{
c=b;
b=a%b;
a=c;
}
printf ( "The GCD of %d and %d is %d\n",m,n,b );
return 0;
}
转载请注明源地址:http://blog.csdn.net/whorus1/article/list/2,谢谢!