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 }