试题系列三(求任意两个数的最大公约数)
1.求任意两个数的最大公约数
1 #include<stdio.h> 2 3 //最简单的方法 4 void getMaxCom1(int a, int b); 5 6 //相对getMaxCom1优化 7 void getMaxCom2(int a, int b); 8 9 //辗转相除法 10 void getMaxCom3(int a, int b); 11 12 int main(int argc, char** argv) 13 { 14 int a = 0; 15 int b = 0; 16 17 printf("please input 2 numbers:"); 18 scanf("%d %d", &a, &b); 19 20 getMaxCom1(a, b); 21 getMaxCom2(a, b); 22 getMaxCom3(a, b); 23 24 return 0; 25 } 26 27 void getMaxCom1(int a, int b) 28 { 29 int nMax = 0; 30 int i = 0; 31 int nMaxCom = 0; 32 33 nMax = a > b?a : b; 34 35 for (i = 1; i < nMax; i++) 36 { 37 if (0 == a%i && 0 == b%i) 38 { 39 if (nMaxCom < i) 40 nMaxCom = i; 41 } 42 } 43 44 printf("%d and %d max common number is %d\n", a, b, nMaxCom); 45 } 46 47 void getMaxCom2(int a, int b) 48 { 49 int i = 0; 50 int nMin = 0; 51 52 nMin = a < b? a : b; 53 54 for (i = nMin; i >= 1; i--) 55 { 56 if (0 == a%i && 0 == b%i) 57 { 58 printf("%d and %d max common number is %d\n", a, b, i); 59 break; 60 } 61 } 62 } 63 64 void getMaxCom3(int a, int b) 65 { 66 int n = 0; 67 68 printf("%d and %d max common number is ", a, b); 69 70 do 71 { 72 n = a % b; 73 a = b; 74 b = n; 75 }while(n); 76 77 printf("%d\n", a); 78 79 }