求两个整数的最大公约数

时间:2022-02-03 12:50:57

《C和指针》第7章第2道编程题:

两个整型值M和N(M、N均大于0)的最大公约数可以按照下面的方法计算:

求两个整数的最大公约数

请编写一个名叫gcd的函数,它接受两个整型参数,并返回这两个数的最大公约数。如果这两个参数中的任何一个不大于零,函数返回零。

 1 /*
2 ** 求两个整数的最大公约数
3 */
4
5 #include <stdio.h>
6
7 int gcd( int M, int N );
8
9 int
10 main()
11 {
12 int m, n;
13 scanf( "%d%d", &m, &n );
14 printf( "%d", gcd( m, n ) );
15 return 0;
16 }
17
18 /*
19 ** 求两个整数的最大公约数
20 ** 如果两个参数中任一个数不大于0,函数返回0
21 */
22 int
23 gcd( int M, int N )
24 {
25 int R, t;
26
27 /*
28 ** 如果M,N任一个数不大于0,函数返回0
29 */
30 if( M <= 0 || N <= 0 )
31 return 0;
32
33 /*
34 ** 保证M>=N
35 ** 这部分多余了感谢@garbageMan的指正
36 if( M < N )
37 {
38 t = M;
39 M = N;
40 N = t;
41 }
42 */
43
44 /*
45 ** 求最大公约数
46 */
47 while( ( R = M % N ) > 0 )
48 {
49 M = N;
50 N = R;
51 }
52
53 return N;
54 }