zoukankan      html  css  js  c++  java
  • 求两个数的最大公约数的三种算法总结

    很有用的总结:转自https://blog.csdn.net/only_invarably/article/details/64967860

    从键盘输入两个整数,求着两个整数的最大公约数。

    解题思路:

    从键盘输入两个数,通过以下的三个方法实现求两个数的最大公约数:    

    辗转相除法:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。

    相减法:取两个数中的最大的数做减数,较小的数做被减数,用最大的数减去小数,如果结果为0,则被减数就是这两个数的最大公约数,如果结果不为0,则继续用这两个数中最大的数减较小的数,直到结果为0,则最大公约数为被减数。

    穷举法:将两个数作比较,取较小的数,以这个数为被除数分别和输入的两个数做除法运算,被除数每做一次除法运算,值减少1,直到两个运算的余数都为0,则该被除数为这两个数的最大公约数。

    /**
     * Author:Probie
     * Date:2017-3-21 21:38:14 
     */ 

    #include <stdio.h>
    int a, b, temp;
    //辗转相除法实现 
    int Division(){
        printf("请输入两个数(a,b): ");
        scanf("%d,%d",&a,&b);
        if(a < b){
            temp = a;
            a = b;
            b = temp;
            
        }
        while(a%b != 0){
                temp = a%b;
                a = b;
                b = temp;
        }
        printf("最大公约数为:%d ",b);
        return 0;

    //相减法实现 
    int Subtract(){
        printf("请输入两个数(a,b): ");
        scanf("%d,%d",&a,&b);
        if(a < b){
            temp = a;
            a = b;
            b = temp;
        }
        while(a-b != 0){
                temp = a-b;
                a = b;
                b = temp;
        }
        printf("最大公约数为:%d ",b);
        return 0;    
    }
    //穷举法实现 
    int Exhaus() {
        printf("请输入两个数(a,b): ");
        scanf("%d,%d",&a,&b);
        if(a < b) {
            temp = a;
            a = b;
            b = temp;
        }
        for(temp = b; a%temp || b%temp; temp--);
        printf("最大公约数为:%d ",temp);
        return 0;
    }
     
    int main(){
        int nub;
        printf(" 求两个数的最大公约数:");
        printf(" 1、辗转相除法");
        printf(" 2、相减法");
        printf(" 3、穷举法"); 
        printf(" 请选择你要使用的方法: ");
        scanf("%d",&nub);
        switch(nub){
            case 1:
                Division();
                break;
            case 2:
                Subtract();
                break;
            case 3:
                Exhaus();
                break;    
        } 
        return 0;
    }

  • 相关阅读:
    我的管理/创业类文章
    去硅谷之前写的文章.
    【Linux资源管理】一款优秀的linux监控工具——nmon
    Oracle 11g密码过期问题
    HP-UNIX平台修改Oracle processes参数报错:ORA-27154、ORA-27300、ORA-27301、ORA-27302
    [转]收集Oracle UNDO诊断信息脚本
    【Linux资源管理】使用sar进行性能分析
    Oracle ASM
    Oracle oerr工具介绍
    Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态
  • 原文地址:https://www.cnblogs.com/bao-ZhangJiao/p/14268790.html
Copyright © 2011-2022 走看看