求最大公约数(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; }

浙公网安备 33010602011771号