问题描述
求出两个数的最大公约数。
算法设计
法1:
两个数的最大公约数有可能是其中较小的小数,所以在按从大到小顺序找寻最大公约数时,循环变量i的初值从较小的数开始依次递减,去寻找第一个能同时整除两整数的自然数,并将其输出。需要注意的是,虽然判定条件是i>0,但在找到第一个满足条件的i值后,循环没必要继续下去,要结束循环只能借助break语句。
完整代码如下:
1 #include
2
3 int main(void){
4 int a,b,temp,i;
5 printf("Input a & b:");
6 scanf("%d%d", &a, &b);
7 if(a
8 temp = a;
9 a = b;
10 b = temp;
11 }
12 for(i=b;i>0;i--){ //循环变量i的初值从小数b开始依次递减
13 if(a%i==0 && b%i==0){
14 printf("最大公约数为%d",i);
15 break;
16 }
17 }
18 }
法2:
辗转相减法:即尼考曼彻斯法。辗转相减法即通过对两数的不断减法运算。(大数减小数:例如9与6,if(9>6)a=3 else b=6-3=3。故他们的公约数为3)
完整代码如下:
#include
int main(){
int a,b,i;
printf("Please input a&b:");
scanf("%d%d",&a,&b);
while(a!=b){
if(a>b)
a=a-b;
else
b=b-a;
}
printf("最大公约数为%d\n",a);
return 0;
}
来源:https://www.cnblogs.com/xiayuan521/p/13176179.html
本文介绍了两种求解两个整数最大公约数的方法:逐步递减法和辗转相减法(尼考曼彻斯法),并提供了完整的C语言实现代码。
4189

被折叠的 条评论
为什么被折叠?



