求两个数的最大公约数的三种算法

时间:2025-03-22 19:24:18
/**
 * Author:Probie
 * Date:2017-3-21 21:38:14
 */

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