Bootstrap

复习辗转相除法求最大公约数

        被除数 ➗ 除数 = 商 ……余数

        求两个数的最大公约数时,假设输入24 和 18,24为被除数,18为除数,6为余数

        这里使用abc代替三个数,商用不到所以不理他

        被除数 ➗ 除数 = 商 ……余数

        24        ➗  18    =  1  ……   6

        a                  b                        c

        18                6

        把 b 的值赋给 a 再把 c 的值赋给 b

        此时

        a % b = 18 % 6 = 0

        则余数6就是最大公约数。

        如果结果不为0,那么再次把

       c 的值赋给 b,b的值赋给a        直到余数为0

        代码实现如下:

using namespace std;
#include <iostream>

int main() {
	int a = 0, b = 0,c = 0;
	cin >> a >> b;
	while (c = a % b) {//如果 a % b != 0 进入循环,顺便把结果赋给c
		a = b;
		b = c;
	}
	//直到a % b == 0 时,退出循环,此时b就是最大公约数。
	cout << b << endl;
	return 0;
}

        这样的实现方法还有个好处,顺便解决了传入的值顺序问题,如果传入的是18和24,那么余数为18,此时a=18,b=24,c=18,经过8、9行的顺序交换,a = 24,b = 18,于是回到了24%18的问题上。

;