從鍵盤輸入兩個整數,求着兩個整數的最大公約數。
解題思路:
從鍵盤輸入兩個數,通過以下的三個方法實現求兩個數的最大公約數:
輾轉相除法:取兩個數中最大的數做除數,較小的數做被除數,用最大的數除較小數,如果餘數爲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;
}