zoukankan      html  css  js  c++  java
  • C实现辗转相除法求两个数的最大公约数

    什么是辗转相除法?

      辗转相除法(又名欧几里德算法),它主要用于求两个正整数的最大公约数。是已知的最古老的算法。

      用辗转相除法求132和72的最大公约数的步骤:

        132 / 72 = 1 ... 60 

        72  /  60 = 1 ... 12

        60 /  12  = 5

      所以他们的最大公约数就是12。

    如何实现辗转相除法?

      我们把要求的两个数定为a和b(a > b)。

      首先算1.a / b = c ... r

      接着2.a = b, b = r,并判断r是否是0。若不为零则重复1,若为0则输出除数,也就是b。

      但是,仔细一想,b = r,r = 0,输出的结果总是0,所以我们要找到原来的b,就是a,所以正确的应该是输出a。

      这是经过重复修改后的伪代码:

      while(b ≠ 0){ 

        r = a mod b;

        a = b;

        b = r;

        if(r == 0) break and show a;

      }

      完整的程序代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int fun(int, int);
    
    int main(int argc,char *argv[])
    {
         int a,b,n;
         printf("请输入两个数:");
         scanf("%d%d",&a,&b);
         if( (a <= 0) || (b <= 0) ){ //数据检查
             printf("除数不能为0");
             return 0;} 
         n = ( a > b ? fun(a,b) : fun(b,a) ); //调用函数并处理大小顺序
         printf("最大公因数:%d",n);
         getch();
         return 0;
     }
     
     int fun(int a,int b)
     {
         int r;
         while(b){ //因为b的初值不为0,所以循环有效。当b=0时,余数r=0,循环终止。
             r = a % b; //取余数
             a = b; //除数作被除数
             b = r; //商作除数
         }
         return a; //a就是最后的除数
     }
  • 相关阅读:
    math相关实现
    集合——PHP实现
    PHP Fatal error——内存用尽
    偶串——状态记忆
    享元模式
    php对象的传递——“通过引用传递”or“传递的是object identifier”?
    JSONObject的parseArray方法作用。
    java android 中的Toast
    delphi android 中 Toast 的实现(老外写的UNIT)
    Delphi XE5 for android 调用Java类库必看的文件
  • 原文地址:https://www.cnblogs.com/mrblug/p/5710843.html
Copyright © 2011-2022 走看看