这里我用了两种方法:
一种是比较常规容易想到的(但是效率相对不高)方法
另一种是效率比较高的方法
法一:
代码:
int main() {
int num1 = 0;
int num2 = 0;
scanf("%d%d", &num1,&num2);
int max = 0;
//假设最大公约数max就是m和n的较小值
if (num1 > num2) {
max = num1;
}
else {
max = num2;
}
while (1) {
if (num1 % max == 0 && num2 % max == 0) {
printf("最大公约数是:%d\n", max);
break;
}
max--;
}
return 0;
}
法二:
代码:
int main() {
int num1 = 0;
int num2 = 0;
int result = 0;
scanf("%d%d", &num1, &num2);
while (result=num1%num2)
{
result = num1 % num2;
num1 = num2;
num2 = result;
}
printf("最大公约数是:%d\n", num2);
return 0;
}
可能有人会说第二种方法你怎么知道第2个数就比第1个数小呢,万一我输入的是6和18,让6在前面,那就测试一下吧,你会发现没有进行比较,也一样没有影响,结果还是正确的
原因是:
我们来看while循环里面的代码
result = num1 % num2;
num1 = num2;
num2 = result;
将6和18代入num1和num2,6%18是等于6,则result=6
而新的num1=num2(即18),而num2=result(即6),
这样在第一次循环就完成了大的数和小的数的比较,所以不会出现问题这个代码