您的位置:首页 > 编程语言 > C语言/C++

C语言 求两个数的最大公约数 (算法)--辗转相减法、辗转相除法

2016-09-28 17:34 288 查看

                                  辗转相减法、辗转相除法

                                                                      --------求两个数的最大公约数

思路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;
}
还有多种思路,下去可以拓展


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: