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):\n");
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\n",b);
32 return 0;
33 }
34 //相减法实现
35 int Subtract(){
36 printf("请输入两个数(a,b):\n");
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\n",b);
49 return 0;
50 }
51 //穷举法实现
52 int Exhaus() {
53 printf("请输入两个数(a,b):\n");
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\n",temp);
62 return 0;
63 }
64
65 int main(){
66 int nub;
67 printf("\n求两个数的最大公约数:");
68 printf("\n1、辗转相除法");
69 printf("\n2、相减法");
70 printf("\n3、穷举法");
71 printf("\n请选择你要使用的方法:\n");
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 }