辗转相减法、辗转相除法
--------求两个数的最大公约数
思路1:用辗转相减法
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
printf("please Enter 2 datas:");
scanf("%d %d",&a,&b);
while(1)
{
if(a>b)
{
a = a-b;//将两个数的差值赋给最大的一个
}
else if(a<b)
{
b = b-a;
}
else
{
printf("%d\n",b);
break;//跳出整个循环
}
}
return 0;
}
思路 2:辗转相减法
#include<stdio.h>
int main()
{
int a = 0;//a、b都是某个数的整数倍
int b = 0;
printf("please Enter2 datas:");
scanf("%d %d",&a,&b);
while(a*b!=0),//a或者b不能为0
{
if(a>b)
{
a = a%b;//将余数赋给最大值,其余数某个数的整数倍
}
else
{
b = b%a;
}
printf("%d\n",a = 0?b:a);
return 0;
}
}
其他思路:由最大公约数的性质
#include<stdio.h>
int main()
{
int a,b,m;
printf("请输入两个数\n");
scanf("%d%d",&a,&b);
for(m=a; ; m--)
{
if(a%m==0 && b%m==0)
break;
}
printf("%d\n",m);
return 0;
}
还有多种思路,下去可以拓展
#include<stdio.h>
int main()
{
int a,b,m;
printf("请输入两个数\n");
scanf("%d%d",&a,&b);
for(m=a; ; m--)
{
if(a%m==0 && b%m==0)
break;
}
printf("%d\n",m);
return 0;
}