求最大公约数C语言

本文介绍了使用C语言实现求最大公约数的三种算法:辗转相除法、更相减损法和穷举法。每种方法都有对应的程序流程和心得分享,包括如何处理边界情况和优化代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序流程,结果展示及心得

     本次程序设计并不难,由于时间和能力问题,并未将三个算法写成一个程序,而是分成三个程序写,固有三个流程图。

第一个  :辗转相除法

 

#include<stdio.h>

#include<math.h>

int main()

{

  int a,b,c,t;

  printf("请输入要求最大公约数的两个数");

  scanf("%d%d",&a,&b);

  if(a>b)

 c=a%b;

  else

  {

 t=a;

 a=b;

 b=t;

 c=a%b;

  }

  if(c==0)

  printf("最大公约数为%d\n",b);/* 因为前面交换过a,b的值所以此处输出b*/

  else

  {

     while(c!=0)

 {

   c=a%b;

   a=b;

   b=c;

 }

  printf("最大公约数为:%d\n",a);/*因为最后一次循环时把c的值赋给bb的值赋给a,故此处应该输出a短的值*/

  }

  return 0;

}

 

 

心得:

   刚开始编程时没有考虑到c直接等于0的情况,所以输入两个可以整除的整数余数为0,输出结果就为0,后来发现只有在前面的数大,后面的数小的时候才能正常运行,所以加了if条件,使得a始终大于b,最终保证程序的正常运行。

第二个  :更相减损法

#include<stdio.h>

#include<math.h>

int main()

{

    int a,b,c;

    printf("请输入两个数");

scanf("%d%d",&a,&b);

while(c!=0)

{

   c=sqrt((a-b)*(a-b));/*如果a b之间的大小没有确定就有可能减出负数,因为判断大小的情况太多,所以直接取绝对值,直到减为0为止*/

   a=sqrt(b*b);

   b=sqrt(c*c);

}

printf("最大公约数是:%d\n",a);

return 0;

}

 

心得:

    同之前一样,开始时未考虑到a,b,c之间的大小关系,很容易减出负数或者无输出结果,考虑到加if判断条件太多,语句也比较长,故所有的值都取绝对值,这样一来直到减为0为止,方便了很多。

第三个  :穷举法

#include<stdio.h>

int main()

{

   int a,b,i;

   printf("请输入两个需要求最大公约数的数");

   scanf("%d%d",&a,&b);

   for(i=a;i>0;i--)

   {

   if(a%i==0&&b%i==0)

   break;

 

   }

   printf("最大公约数是%d\n",i);

 return 0;

}

 

心得:

while 语句未能实现正确运算,故改用for循环,很简单的实现了遍历。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值