苏小红C语言第四版课后习题练习7.7最大公约数三种计算方式

 

 (1)

  1 #include<stdio.h>
  2 int Gcd(int x, int y){
  3     int z, max;
  4 
  5     do{
  6         printf("please input two numbers\n");
  7         scanf("%d%d",&x,&y);
  8         z=x>=y?y:x;      //确定数输入数字大小,确保从较小的数字开始计算;
  9         for (int i = z;i > 0;i--){
 10             if (x%i == 0&&y%i == 0){    //通过for循环结构逐个计算;
 11                 max = i;
 12                 break;
 13             }
 14         }
 15     }while (x <= 0||y <= 0);    //防止数字输入不正确;
 16 
 17     return max;
 18 }
 19 
 20 int main()
 21 {
 22     int num1, num2;
 23 
 24     printf("the greatest common divisor is: %d\n",Gcd(num1, num2));
 25 
 26     return 0;
 27 
 28 }

(2)

  1 #include<stdio.h>
  2 int Gcd(int x, int y){
  3     int z, e, r;
  4 
  5     do{
  6         printf("please input two numbers : \n");
  7         scanf("%d%d",&x, &y);
  8     }while (x <= 0||y <= 0);      //先对输入的数字是否正确进行判断;
  9 
 10     z = x>=y?x:y;      
 11     e = x>=y?y:x;        //确定两个数字的大小,保证取余运算时大的数字在前面;
 12 
 13     do{
 14         r = z%e;
 15         z = e;
 16         e = r;
 17     }while(e != 0);         //当取余结果为0时返回分子代表的数值
 18 
 19     return z;
 20 
 21 }
 22 
 23 int main()
 24 {
 25     int num1, num2;
 26 
 27     printf("the greatest common devisor is :%d\n",(Gcd(num1, num2)));
 28 
 29 
 30 
 31     return 0;
 32 }
 33 

 

 (3)

 

  1 #include <stdio.h>
  2 int Gcb(int x, int y){
  3     int z,e;
  4 
  5     z =x>=y?x:y;        //确定两个数的大小;
  6     e =x>=y?y:x;
  7 
  8     if (z != e){
  9         Gcb(z-e, e);       //按照求最大公约数的性质进行递归求解;
 10     }else {
 11         return z;
 12     }
 13 }
 14 
 15 int main()
 16 {
 17     int num1, num2;
 18 
 19     do{
 20         printf("please input two numbers:\n");    //对于输入数字进行判断;
 21         scanf("%d%d", &num1, &num2);//此次未写在定义函数中防止每次递归都要重新提示并输入
 22 
 23     }while (num1 <= 0||num2 <= 0);
 24 
 25     printf("the greatest common devisor is :%d\n", (Gcb(num1, num2)));
 26 
 27 
 28     return 0;
 29 }
 30 

 (可以看出递归算法更加侧重于计算的技巧,并且计算机计算的次数也相对更少);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值