用户输入两个数字,然后通过程序计算出这两个数字的最大公约数:
最大公约数(greatest common divisor,简写为 gcd ;或highest common factor,简写为hcf),指某几个整数共有因子中最大的一个
#include <iostream>
using namespace std;int main() {int n1, n2;cout << "输入两个整数: ";cin >> n1 >> n2;// temp最小值进行计算int temp=n1;if (temp>n2)temp=n2;int gcd ;for (int i = temp; i>=1; i--) {if (n1 % i == 0 && n2 % i ==0) {gcd = i;break;}}cout << "最大公约数为: " << gcd ;return 0;
}
以上计算过程简单描述为:
输入两个变量n1 n2分别表示第一个输入的数和第二个输入的数,并且在计算最大公约数的时候,在按n1,n2中小值的进行计算,比如 输入 10 20,那么我们计算按最大10进行计算即可。 最大公约数,不会超过输入的最小值,然后进行循环,倒序进行循环,然后判断,如果两个都同时余数为0的话,则表示计算完成,中止计算,输入最大公约数,
运程程序:
前面输入的当前值每一行表示进行了一次计算,那么从这里我们可以看出,当前计算我们用了5次计算完成,
那么想一想,如果我们按正序的话,可以不可以也来完成呢?下面是按正则写的程序
#include <iostream>
using namespace std;int main() {int n1, n2;cout << "输入两个整数: ";cin >> n1 >> n2;// 如果 n2 大于 n1 交换两个变量int temp=n1;if (temp>n2)temp=n2;int gcd ;for (int i = 1; i<=temp; i++) {cout <<"当前值:"<< i << endl;if (n1 % i == 0 && n2 % i ==0) {gcd = i; }}cout << "最大公约数为: " << gcd ;return 0;
}
执行结果为:
我们可以看到两个得到的结果相同,那么我们再来看一下执行过程打印的当前值,每打印一行,则执行一次循环,从上面可以看出,同样的方法,倒序减比正序加,执行的数据量要少一些,但是也有一些例外,比如:
然后再执行正序:
可以看到两个执行的循环次数一样,看到截图中,有的显示时间,有的不显示,暂时不考虑这个时间,这个时间跟我输入时的等待时间有关,并不是程序实际的运行和执行时间。
想一想,如果有多个数的话,最大公约数应该怎么计算。