怎样求最大公约数(c++)

怎样求最大公约数(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,有些地方做的不好。

猜你喜欢

转载自blog.csdn.net/m0_52068514/article/details/115287874