这个题,我都不好意思把当时写的代码发出来 = = 我啥都不说了,等下再去写一遍
【题目】
输入两个正整数a和b,求出他们的最小公倍数c和最大公约数d。例如,输入20和44,c、d分别为220和4。
【提示】
最小公倍数求法:
可令ab中较大的数为max,另一个为min,而后找出max的1,2,3...n倍中能够被min整除的最小的数。
最大公约数求法:辗转相除法。【我就不打了,这里是维基百科的介绍】
【代码】
/************
* 2013.10.23
* P44 自立题八
* 求最大公约数,最小公倍数
************/
#include <iostream>
#include <windows.h>
using namespace std;
int mymax(int a, int b);
int mymin(int a, int b);
int Get_Smallest_X(int a, int b);
int Get_Bigest_X(int a, int b);
int main()
{
int a, b, big, sma;
cout<<"请输入两个正整数:";
cin>>a>>b;
big = mymax(a, b);
sma = mymin(a, b);
cout<<"最小公倍数为:"<<Get_Smallest_X(big, sma)<<endl;
cout<<"最大公约数为:"<<Get_Bigest_X(big, sma)<<endl;
system("pause");
return 0;
}
int mymax(int a, int b)
{
if(a>=b)
{
return a;
}else{
return b;
}
}
int mymin(int a, int b)
{
if(a>=b)
{
return b;
}else{
return a;
}
}
int Get_Smallest_X(int a, int b) // a>=b
{
int i, ans;
for(i=1;1;i++)
{
if(a * i % b == 0)
{
ans = a * i;
break;
}
}
return ans;
}
int Get_Bigest_X(int a,int b) // a>=b
{
int r=-1;
while(r != 0)
{
r = a % b;
a = b;
b = r;
}
return a;
}
/*********
* 7sDream
* 18:33
*********/
【结果】
上面写的那个槽点太多>_<比较大小写的太复杂了 重新写一个,两个主要的算法函数都不变
int main()
{
int a, b;
cin>>a>>b;
cout<<"最小公倍数:"<<Get_Smallest_X(a>=b?a:b,a>=b?b:a)<<endl;
cout<<"最大公约数:"<<Get_Bigest_X(a>=b?a:b,a>=b?b:a)<<endl;
system("pause");
}