• 最大公约数


     1 求两个数的最大公约数的三种算法
     2 原创 2017年03月22日 22:01:04 标签:c语言 /算法 11434
     3 从键盘输入两个整数,求着两个整数的最大公约数。
     4 解题思路:
     5 从键盘输入两个数,通过以下的三个方法实现求两个数的最大公约数:    
     6 辗转相除法:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。
     7 相减法:取两个数中的最大的数做减数,较小的数做被减数,用最大的数减去小数,如果结果为0,则被减数就是这两个数的最大公约数,如果结果不为0,则继续用这两个数中最大的数减较小的数,直到结果为0,则最大公约数为被减数。
     8 穷举法:将两个数作比较,取较小的数,以这个数为被除数分别和输入的两个数做除法运算,被除数每做一次除法运算,值减少1,直到两个运算的余数都为0,则该被除数为这两个数的最大公约数。
     9 /**
    10  * Author:Probie
    11  * Date:2017-3-21 21:38:14 
    12  */ 
    13 
    14 #include <stdio.h>
    15 int a, b, temp;
    16 //辗转相除法实现 
    17 int Division(){
    18     printf("请输入两个数(a,b):
    ");
    19     scanf("%d,%d",&a,&b);
    20     if(a < b){
    21         temp = a;
    22         a = b;
    23         b = temp;
    24         
    25     }
    26     while(a%b != 0){
    27             temp = a%b;
    28             a = b;
    29             b = temp;
    30     }
    31     printf("最大公约数为:%d
    ",b);
    32     return 0;
    33 } 
    34 //相减法实现 
    35 int Subtract(){
    36     printf("请输入两个数(a,b):
    ");
    37     scanf("%d,%d",&a,&b);
    38     if(a < b){
    39         temp = a;
    40         a = b;
    41         b = temp;
    42     }
    43     while(a-b != 0){
    44             temp = a-b;
    45             a = b;
    46             b = temp;
    47     }
    48     printf("最大公约数为:%d
    ",b);
    49     return 0;    
    50 }
    51 //穷举法实现 
    52 int Exhaus() {
    53     printf("请输入两个数(a,b):
    ");
    54     scanf("%d,%d",&a,&b);
    55     if(a < b) {
    56         temp = a;
    57         a = b;
    58         b = temp;
    59     }
    60     for(temp = b; a%temp || b%temp; temp--);
    61     printf("最大公约数为:%d
    ",temp);
    62     return 0;
    63 }
    64  
    65 int main(){
    66     int nub;
    67     printf("
    求两个数的最大公约数:");
    68     printf("
    1、辗转相除法");
    69     printf("
    2、相减法");
    70     printf("
    3、穷举法"); 
    71     printf("
    请选择你要使用的方法:
    ");
    72     scanf("%d",&nub);
    73     switch(nub){
    74         case 1:
    75             Division();
    76             break;
    77         case 2:
    78             Subtract();
    79             break;
    80         case 3:
    81             Exhaus();
    82             break;    
    83     } 
    84     return 0;
    85 }
  • 相关阅读:
    线程带参数操作
    静态页面不识别include
    当网站遭遇DDOS攻击的解决方案及展望
    带进度条上传控件
    用js实现了表格数据管理的以下几个功能:
    怎么面试一个人
    map的使用
    在Axapta中实现trim函数
    Axapta财务过账分析(一)
    在Axapta中实现split函数
  • 原文地址:https://www.cnblogs.com/passion-sky/p/8031602.html
Copyright © 2020-2023  润新知