求最大公约数(c语言)

问题描述

求出两个数的最大公约数。

算法设计

法1:

两个数的最大公约数有可能是其中较小的小数,所以在按从大到小顺序找寻最大公约数时,循环变量i的初值从较小的数开始依次递减,去寻找第一个能同时整除两整数的自然数,并将其输出。需要注意的是,虽然判定条件是i>0,但在找到第一个满足条件的i值后,循环没必要继续下去,要结束循环只能借助break语句。

完整代码如下:

 

 1     #include<stdio.h>
 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<b){
 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<stdio.h>

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;
}

 

posted @ 2020-06-22 12:13  兔奶糖  阅读(716)  评论(0)    收藏  举报