给你两个数 a,b,求a和b的最大公约数
输入:12 18
输出:6
思路描述:辗转相除法
我们假设要求12和18的最大公约数(a为12,b为18)
辗转相除法步骤:
因为辗转相除法是要一直重复做的所以我括号里只标注了第一次的值,详细的一步一步的值请看表格
1、先确认b > a,如果不是两者交换位置,只判断1次,后面不需要再进行判断
2、t赋值为a % b,(第一次t为12)
3、a赋值为原来的b(第一次a是18)
4、b赋值为t(第一次b是12)
5、如果这时候b的值为0,a为a和b的最大公约数(第一次还不是)
6、重复步骤2~4,如果步骤5成立了,a为a和b的最大公约数
a | b | t |
12 | 18 | 12 |
18 | 12 | 6 |
12 | 6 | 0 |
6 | 0 |
代码如下,
long long gcd(int a, int b){ if(b == 0){ return a; }else{ return gcd(b,a%b); } }