题目
求最大公约数
输入格式
两个数用空格隔开
输出格式
输出结果
输入输出样例
输入:20 40
输出:20
代码
1.暴力枚举法:
(既然求最大值,只要输出得到的第一个结果就好了)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a , b;
scanf("%d %d", &a, &b);
for (int i = a; i >= 1; i--)
{
if (a % i == 0 && b % i == 0)
{
printf("%d\n", i);
break;
}
}
return 0;
}
2.辗转相除法(也叫欧几里德算法):
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a , b;
int c = 0;
scanf("%d %d", &a, &b);
while (c = a % b)
{
a = b;
b = c;
}
printf("%d", b);
return 0;
}
3.使用库函数法:
(同时我也见到了我从见过的古代代码——在gcd函数里面使用两个return实现循环)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int gcd(int a, int b) {
if (a % b == 0)
return b;
return gcd(b, a % b);
}
int main(void) {
int a = 10, b = 8;
scanf("%d %d", &a, &b);
printf("%d\n", a, b, gcd(a, b));
return 0;
}
(这里的gcd()函数也可以使用三目运算法来替代,效果是一样的)
int gcd(int a,int b) {
return b>0 ? gcd(b,a%b):a;
}
好了,求最大公约数就介绍到这里!