被除数 ➗ 除数 = 商 ……余数
求两个数的最大公约数时,假设输入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的问题上。