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;
}