美文网首页
辗转相除法的应用

辗转相除法的应用

作者: MambaHJ | 来源:发表于2018-04-12 22:30 被阅读10次
    • 题目: 设计实现抽象数据结构"有理数",基本操作包括有理数的加减乘除,以及求有理数的分子分母

    • 思路: 设计这个数据结构很简单,但是当时在如何得到有理数的分子分母上楞了一下,后来重新思考了,大概过程:

      1. 用字符串接收一个小数形式的有理数,例如"1.234" 转化为浮点数 1.234
      2. 所有有理数都可以如1.234一样写成1234 / 1000的形式
      3. 12341000的最大公约数为2,然后12341000分别除去它即可分别得到最简分子分母617500
    • 求最大公约数的算法(辗转相除法)
      具体做法:

    用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

    代码:

    int gcd(int ob1,int ob2){       
        int temp;
        if(ob1 < ob2){  //总是用大数对小数取模    
            temp=ob1;
            ob1=ob2;
            ob2=temp;
        }
        if(!ob2)                 //递归基
              return ob1;
        else    
              return gcd(ob1%ob2,ob2);
    }
    

    改写为更简洁的形式:

    int gcd(int ob1,int ob2){
         return ob2==0? ob1:gcd(ob2, ob1 % ob2);
     }
    

    相关文章

      网友评论

          本文标题:辗转相除法的应用

          本文链接:https://www.haomeiwen.com/subject/iibzcftx.html