求兩個數的最大公約數的三種算法

從鍵盤輸入兩個整數,求着兩個整數的最大公約數。

解題思路:

從鍵盤輸入兩個數,通過以下的三個方法實現求兩個數的最大公約數:

輾轉相除法:取兩個數中最大的數做除數,較小的數做被除數,用最大的數除較小數,如果餘數爲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):\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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章