当前位置: 代码迷 >> C语言 >> 我写的“求最大公约数和最小公倍数“,拿出来晾晾,高手指点.............
  详细解决方案

我写的“求最大公约数和最小公倍数“,拿出来晾晾,高手指点.............

热度:132   发布时间:2008-03-12 10:32:24.0
我写的“求最大公约数和最小公倍数“,拿出来晾晾,高手指点.............
#include <stdio.h>
int get_gy_gb(int num1, int num2) {
  int i, min, result = 0;
  min = (num1 > num2) ? num2 : num1;        //Get the min num of the two.
  for (i = 1; i <= min; i++) {
      if (num1 % i == 0 && num2 % i == 0) {
          result = (result >= i) ? result : i;        //Get the max common divisor.
    }
  }
  return result;
}
int main(void) {
  int n1, n2, result;
  printf("Please input two numbers: \n");
  scanf("%d%d", &n1, &n2);
  result = get_gy_gb(n1, n2);
  printf("The max common divisor is : %d \n", result);
  printf("The min common multiple is : %d \n", (n1 * n2) / result);
  return 0;
}

有什么不足请高手们不吝赐教,谢谢!!!!!!!!!!!!

[[it] 本帖最后由 mqh21364 于 2008-3-12 17:49 编辑 [/it]]
搜索更多相关的解决方案: result  int  最小公倍数  最大公约数  min  

----------------解决方案--------------------------------------------------------
result = (result >= i) ? result : i;        //result永远不可能大于或等于i吧
直接 result=i就可以了

最小公倍数可以使用 辗转相除法
----------------解决方案--------------------------------------------------------
嗯,同意二楼的。
result = (result >= i) ? result : i;
直接改成
result = i;
即可
----------------解决方案--------------------------------------------------------
哦,说得对,谢谢楼上的两位哦!!!!
----------------解决方案--------------------------------------------------------
不错``````````
----------------解决方案--------------------------------------------------------
谢谢楼上的!!!!!!感动。。。。。。
----------------解决方案--------------------------------------------------------
lz的题目是不是写错了
则么会是最小公约数和最大公倍数那,最小公约数不就是1吗,最大公倍数那就是无穷了.
----------------解决方案--------------------------------------------------------
是错了,谢谢秦始皇。。。。。。。
----------------解决方案--------------------------------------------------------
你太客气了,寡人一向助人为乐。哈哈。。。。。
----------------解决方案--------------------------------------------------------
如果面试你这么答,人家很失望的。如果给你两个数是1000001,1000003,
你这个最大公约数要算到多久?另外你函数里那个result也用的莫名其妙~。(总算明白你的意思了,原来你只是想把所有公约数临时记录到result。)

这个要用欧几里德算法来求,也就是前面那位网友说的辗转相除法。救人救到底,我还是给你写出来吧:最大公约数:
gcd(m,n)= m; (n=0)
          gcd(n,m%n); (其他)

最小公倍数=m*n/gcd(m,n);
----------------解决方案--------------------------------------------------------
  相关解决方案