输入两个数,求这两个数的最大公约数:
方法1:直接找出两个数的较小数,然后从这个较小数开始,逐级递减,判断哪个位置就是这两个数都可以除尽的。(此方法采用循环,但是比较次数较多,时间复杂度更大)
方法2:同样的也是采用循环,但是此时循环的主体定义为一个 i = 1,逐级递增,首先判断这两个数中的较小数能否被 i 除尽,若能,则再判断较大数能否被 i 除尽,若能,则较小数除 i 的值则为我们要找的最大公约数,若不能,则返回循环体,i++,继续查找。代码展示如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int min,max,num=1,k=1;
if (m>n){
min = n;
max = m;
}
else{
min = m;
max = n;
}
for (int i = 1; i <= min; i++){
if (min % i == 0){
if(max % (min / i) == 0){
num = min / i;
break;
}
}
}
System.out.print(num);
}
}
编写这道题时一定要注意循环体的主体,若用方法一,则主体(逐级递增或者是逐级递减的数)是两个数中的较小值;若用方法二,则主体是一个依次递增的一个值,这个值会首先用来判断能否被较小数除尽。