怎样求最大公约数(c++)
在求最大公约时,有许多代码实现,比如辗转相除法,此外这里推荐一个比较好的理解的方法。
下面是代码实现:
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
if(b==0)
{
return a;
}
else
{
return gcd(b,a%b);
}
}
int main()
{
int m,n;
cin>>n>>m;
cout<<gcd(n,m);//在devc++中有__gcd()函数可以直接调用,但是VS中没有,具体原因可以试着查查
return 0;
}
/*
devc++中可以直接写成
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
cout<<__gcd(n,m)<<endl;
return 0;
}
//你说代码简单不简单
*/
看了上面的,是不是有点不明白,不过没关系,下面还有具体的:
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
while(n!=m)
{
if(m>n)
{
m=m-n;
}
else
{
n=n-m;
}
}
cout<<n<<endl;//最后得到的n、m是相等的,所以输出n、m都无所谓
return 0;
}
如果你还想求最大公倍数,那就更简单了,其实就是:先把m,n的最大公约数求出来,在除以两的乘积就行;参照前面的代码;
代码实现:
#include<iostream>
using namespace std;
int main()
{
int n,m,a,b;
cin>>n>>m;
a=n,b=m;//对原来的值进行保留
while(n!=m)
{
if(m>n)
{
m=m-n;
}
else
{
n=n-m;
}
}
//重点是下行代码
cout<<a*b/n<<endl;//为了避免数据溢出可以写成a/n*b
return 0;
}
第一次写CDSN,有些地方做的不好。