#include <iostream>
using namespace std;
int min; //定义一个全局变量来保存最小公倍数
int max(int a,int b) //定义算法函数
{
int n=1; //先定义两个数的最大公约数是1
int sum=1; //设置最终的最大公约数为1
for(n=1;n<=(a>b?b:a);n++)
{
if(a%n==0&&b%n==0)
{
sum=sum*n;
a=a/n;
b=b/n;
n=1;
continue;
} //每求出一个公共除数后就将原数a和b设置为(a/n)和(b/n)
}
min=sum*a*b; //最小公倍数
return sum; //最大公约数
}
main()
{
int Fnumber,Snumber;//输入的两个数
cout<<"please enter the First number: ";
cin>>Fnumber;
cout<<"please enter the Second number: ";
cin>>Snumber;
int Gnumber=max(Fnumber,Snumber);
cout<<"the max number is: "<<Gnumber<<endl;
cout<<"the min number is: "<<min<<endl;
return 0;
}
/* Abs<N>::ans 求 N 的绝对值
*/
template <int N>
struct Abs
{
static const int
ans = (N >= 0) ? N : -N;
};
/* Max<M, N>::ans 求 M 与 N 中最大值
*/
template <int M, int N>
struct Max
{
static const int
ans = (M > N) ? M : N;
};
/* Min<M, N>::ans 求 M 与 N 中最小值
*/
template <int M, int N>
struct Min
{
static const int
ans = (M < N) ? M : N;
};
/* GCD<M, N>::ans 求 M 与 N 的最大公约数
*/
template <int M, int N>
struct GCD
{
private:
static const int
MM = Max<Abs<M>::ans, Abs<N>::ans>::ans; // MM 应大于 NN
static const int
NN = Min<Abs<M>::ans, Abs<N>::ans>::ans; // 这样有利于除法
public:
static const int
ans = (MM % NN == 0) ? NN : GCD<NN, MM % NN>::ans;
};
/* GCD<M, 1>::ans 特化,最终形态之一,结果是 M
*/
template <int M>
struct GCD<M, 1>
{
static const int
ans = 1;
};