求两个数的最大公约数是程序算法当中最简单的一类,今天看书时又看到了,于是又写了一遍;先上代码再讲原理:
template<class T>
T Max(T &a,T &b)
{
return a>b?a:b;
}
template<class T>
T Min(T &a,T &b)
{
return a<b?a:b;
}
int Maxyue(int test1,int test2)
{
int a = Max(test1,test2);
int b = Min(test1,test2);
int redu = a%b;
while(redu)
{
a = b;
b = redu;
redu = a%b;
}
return b;
}
#include <iostream>
using namespace std;
#include <stdio.h>
int main(int argc,char** argv)
{
int testnum1 = 4563;
int testnum2 = 5972;
int resultMaxyue = Maxyue(testnum1,testnum2);
cout<<"最大公约:"<<resultMaxyue<<endl;
}
结果:3,就不截图了,各位有兴趣的可以试一下。
原理:对于两个数字求最大公约数,那么必然有一大一小,那么要想让这两个数都能除开,无非就是小的一个可以整除,并且两个数的差值也可以整除。怎么样,有没有理解?!其实原理就是这么简单!!!
在求两个数字的大小时,用了模板函数,这个很容易理解吧!!!!