最大公约数和最小公倍数的C/C++实现

作者在 2006-08-02 08:42:00 发布以下内容

#include <iostream>
#include <cstdlib>
using namespace std;

int gcd (int a, int b)
{
  if (a < 0 || b < 0)
    return 0;
  else if(a == b)
    return a;
  else
  {
    for( ; a!=0 && b!=0; (a=a%b) && (b=b%a))
      ;
    return a | b;
  }
}

int lcm(int a, int b)
{
  return a*b/gcd(a, b);
}

int main()
{
  int a = 15;
  int b = 25;
  cout<<gcd(a, b)<<endl;
  cout<<lcm(a, b)<<endl;
  system("pause");
  return 0;
}

programming | 阅读 5128 次
文章评论,共5条
kai(作者)
2006-08-03 23:19
1
原来朋友是想将负数也考虑进去。 我这里倒要问一下, 
25, -5 的最大公约数是什么?
-25, 5 的最大公约数又是多少?
kai(作者)
2006-08-04 00:26
2
http://en.wikipedia.org/wiki/Greatest_common_divisor

你可以先看一下上面这个连接。 

(5, 0)  的最大公约数是5, 我的程序输出也是5
(25, -5) 的最大公约数是-5, 不是 5。
kai(作者)
2006-08-04 00:35
3
另外这个网页你也可以看一下:
http://en.wikipedia.org/wiki/Euclid%27s_algorithm
kai(作者)
2006-08-04 01:50
4
对于gcd 函数, 你也可以这样写:
int gcd(int a, int b) {
  if (b == 0)
    return a;

  return gcd(b, a % b);
}

或者这样写:
int gcd(int a, int b) {
  int t;
  while (b != 0) {
    t = b;
    b = a % b;
    a = t;
  }
  return a;
}
kai(作者)
2006-08-04 02:00
5
对于lcm 的修正:

int lcm(int a, int b)
{
  if(a == 0 && b == 0)
    return 0;
  return a*b/gcd(a, b);
}
游客请输入验证码

kai
浏览94993次