C语言某题,求两个数m和n的最大公约数
11
Sep
2
C语言某题,求两个数m和n的最大公约数。个人感觉这道题很好,不仅可以更深入的理解解题思路(算法),对代码编写也是一个好的锻炼。思路如下:
S1:最大公约数,即“指某几个整数共有公约数中的最大一个”,那么具体什么是公约数呢?不理解的同学可以报考最近的初中,重新学习一下。如果是m和n的话,首先要确定其大小,因为如果这个公约数属于数值小的一方,那么他也必定属于数值大的一方,另外其中较小数也就是较大数的公约数也说不定。
S2:找出较小一方后,以(较小一方-1)为分母,和较小一方相除。为什么要-1呢,因为任何数都可以被自己整除,是没有意义的。
S3:不断循环,直到找到最近能被自己整除的,那么这个数字就是最大公约数。
代码及说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void main() { int m,n; scanf("%d %d", &m, &n); /*用户输入m和n*/ int min; if (m>n) min=n; /*比较m和n大小*/ else min=m; for (int i=min; i>=1 ;i--)/*定义i循环,i先等于最小一方,循环一次减少1*/ { if (m%i==0 && n%i==0)/*使m和n都除以i,余数为零时满足条件,否则继续循环*/ { printf("%d是%d和%d的最大公约数\n", i, m, n); break;/*满足条件后循环终止*/ } |
Filed Under: 职业生涯
最小公约数不都是1吗
恩。。我写错了,已经改正,谢谢指出~