文章最后有代码,需要自取若使用vs2019以及其系列的编译器,需要将scanf函数名换成scanf_s其余不变:
如果有建议请在评论区打出来谢谢
算法原理:两个数之间求最大公约数:这里我们记为a,b
即:用大的数除以小的数,求得其余数,余数记为c,
接着使用上一次的除数除以余数即使用b除以c求得其余数,如此循环下去
直到余数为0,此时被除数即为两个数之间的最大公约数。
我们举个例子:
对(300和51求余数):
使用欧几里得算法:
300 /51.....45(300除以51余45)
51 / 45.....6
45 / 6.....3
6/3....0
所以300和51的最大公约数为3;
但是在写代码的时候我们还需要考虑到输入的两个数字大小、第一次就能整除、两个数相等的情况并处理,好的代码不是写出来的是测试出来和改出来的
#include<stdio.h>
int EA(int a,int b) // 欧几里得算法
{
int remainder;
int middle;
if (a < b) // a,b交换值
{
b = a + b;
a = b - a;
b -= a;
}else if(a==b)
{
return a;
}
do
{
remainder = a % b;
if (remainder == 0)return b;
a = b;
b = remainder;
} while (remainder!=0);
return b;
}
void main()
{
int a, b;
printf("请输入数字");
scanf("%d%d",&a ,&b);
int c = EA(a,b);
printf("%d和%d的最大公约数是%d",a,b,c);
}
#include<stdio.h>
int EA(int a,int b) // 欧几里得算法
{
int remainder;
int middle;
if (a < b) // a,b交换值
{
b = a + b;
a = b - a;
b -= a;
}else if(a==b)
{
return a;
}
do
{
remainder = a % b;
if (remainder == 0)return b;
a = b;
b = remainder;
} while (remainder!=0);
return b;
}
void main()
{
int a, b;
printf("请输入数字");
scanf("%d%d",&a ,&b);
int c = EA(a,b);
printf("%d和%d的最大公约数是%d",a,b,c);
}