学学笔记 - 官方 Qiter | 学习笔记

C++ 实例17 - 求两数的最大公约数

发布时间:2年前热度: 274 ℃评论数:

C++ 实例 - 求两数的最大公约数

用户输入两个数,求这两个数的最大公约数。

实例

#include <iostream>
using namespace std;

int main()
{
    int n1, n2;

    cout << "输入两个整数: ";
    cin >> n1 >> n2;

    while(n1 != n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }

    cout << "HCF = " << n1;
    return 0;
}

以上程序执行输出结果为:

输入两个整数: 78
52
HCF = 26

实例

#include <iostream>
using namespace std;

int main() {
    int n1, n2, hcf;
    cout << "输入两个整数: ";
    cin >> n1 >> n2;

    // 如果 n2 大于 n1 交换两个变量
    if ( n2 > n1) {   
        int temp = n2;
        n2 = n1;
        n1 = temp;
    }

    for (int i = 1; i <=  n2; ++i) {
        if (n1 % i == 0 && n2 % i ==0) {
            hcf = i;
        }
    }

    cout << "HCF = " << hcf;
    return 0;
}

以上程序执行输出结果为:

输入两个整数: 78
52
HCF = 26

当输入两个数相等时,最大公约数还是其本身,等于说不受输入数值影响。找公约数的前提是,输入为整型,等于说受输入类型影响。

最大公约数计算:两数能同时被 i 整除。

最小公倍数计算:两数相乘 / 最大公约数。

#include <iostream>
#include <typeinfo> 
#include <iomanip>
using namespace std;

int main()
{
   int a,b;
   int MAX,MIN,i; 
   cout <<"输入两个数: ";
   cin >> a >> b;
   cout<<"检查输入数据类型"<<typeid(a).name()<<setw(6)<<typeid(b).name()<<endl;
   //建议输入数据非法时,做异常抛出 throw 

   // 找到两个数中,最大的 
   MAX=a?b:a,b;

   // 确定除数,被除数 
   if(a==MAX)
      MIN=b;
   else        
      MIN=a;   

   // 求最大公约数, 
   for(i=MIN;i>1;i--)      
   {
      if((MAX%i==0)&&(MIN%i==0)) 
           break;       
      else          
           continue;   
   }       

    cout<<"最大公约数"<<i<<endl;    
    cout<<"最小公倍数"<<(a*b)/i; 
    return 0;
}

还可以用辗转相除法:

#include <iostream>

using namespace std;

int main() {
    int m,n;
    cout<<"输入两个整数:";
    cin >>m >> n;
    cout<<m <<endl;
    cout<<n<<endl;
    int r = m%n;
    while(r!=0){
        m=n;
        n=r;
        r=m % n;
    }
    cout <<"HCF="<< n << endl;
    return 0;
} 

C++ 实例17 - 求两数的最大公约数

栏目导航

  1. Cpp笔记

手机扫码访问