算法说明:
多为科学计算,程序流程图更易理解,如下
而求三个数的运算,我采用先计算两个数字的最大公约数/最小公倍数,再于第3个数进行计算,程序采用递归调用,例:chu_yue(chu_yue(x,y),z)
#include <iostream>
using namespace std;
int chu_yue(int x, int y) //辗转相除法求最大公约数
{
int z = y;
while(x%y!=0)
{
z = x%y;
x = y;
y = z;
}
return z;
}
int jian_yue(int x,int y) //辗转相减法求最大公约数
{
while(x != y)
{
if(x>y)
{
x = x - y;
}
else
{
y = y - x;
}
}
return x;
}
int qiongju_yue(int x,int y) //穷举法求最大公约数
{
int temp = 0;
for(temp = x ; ; temp-- )
{
if(x%temp == 0 && y%temp==0)
break;
}
return temp;
}
int chu_bei(int x,int y) //辗转相除法求最小公倍数
{
int a=0,b=0;
int temp=0;
if(x<y)
{
temp=x;
x=y;
y=temp;
}
a=x*y;
while(y!=0)
{
b=x%y;
x=y;
y=b;
}
return a/x;
}
int jian_bei(int x,int y) //辗转相减求最小公倍数
{
int a=x,b=y;
while(x!=y)
{
if(x>y)
{
x=x-y;
}else
{
y=y-x;
}
}
return a*b/x;
}
int qiongju_bei(int x,int y) //穷举法求最小公倍数
{
int a,b;
if(x>y)
{
a=x;
}
else
{
a=y;
}
while(1)
{
if((a%x==0)&&(a%y==0))
{
b=a;
break;
}
a++;
}
return b;
}
int main(){
int x,y,z;
cout<<"请输入3个正整数 中间用空格隔开"<<endl;
cin>>x>>y>>z; //输入3个数字
/*使用函数里面套函数的递归调用计算3个数*/
cout<<"使用辗转相除求最大公约数得 "<<chu_yue(chu_yue(x,y),z)<<endl; //辗转相除求最大公约数
cout<<"使用辗转相减求最大公约数得 "<<jian_yue(jian_yue(x,y),z)<<endl; //辗转相减求最大公约数
cout<<"使用穷举求最大公约数得 "<<qiongju_yue(qiongju_yue(x,y),z)<<endl; //举求最大公约数
cout<<"使用辗转相除求最小公倍数得 "<<chu_bei(chu_bei(x,y),z)<<endl; //辗转相除求最小公倍数
cout<<"使用辗转相减求最小公倍数得 "<<jian_bei(jian_bei(x,y),z)<<endl; //辗转相减求最小公倍数
cout<<"使用穷举求最小公倍数得 "<<qiongju_bei(qiongju_bei(x,y),z)<<endl;//穷举求最小公倍数
return 0;
}