找出两个数的最大公约数
1.辗转相除法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int max = 0;
int min = 0;
scanf("%d %d", &max, &min);
if (max < min) //让大数一直是m,小数为n
{
int a = max;
max = min;
min = a;
}
if (0 == (max % min))//整除时,最大公约数为小的那个数
{
printf("最大公约数为:%d", min);
}
while (0 != (max % min))//判断大数除以小数是否整除
{
max = (max % min);//将余数赋值给max
if (max < min)//保持大数为max,小数位min
{
int a = max;
max = min;
min = a;
}
}
printf("最大公约数是:%d\n", min);
return 0;
}
简约版
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
scanf("%d%d",&m,&n);
int t = 0;
while (t = m % n)
{
m = n;
n = t;
}
printf("最大公约数是:%d\n", n);
return 0;
}
2.试值法(最大公约数一定是小于等于小的那个数)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
int max = 0;
scanf("%d %d", &m, &n);
if (m < n) //把小的那个数赋值给max
max = m;
else
max = n;
while (1) //max自减循环到满足条件为止
{
if (0 == (m % max) && 0 == (n % max))
{
printf("最大公约数为:%d\n", max);
break;
}
max--;
}
return 0;
}