小弟初学C++,再来问个基础问题。
以下程序是求两个整数的最小公约数和公倍数的。int lcm(int,int); //声明计算最小公倍数的函数
int gcd(int,int); //声明计算最大公约数的函数
int main(int argc, char* argv[])
{
int m,n;
cout << "请输入两个非负数: ";
cin >> m >> n;
cout << "gcd(" << m << "," << n << ") = " << gcd(m,n) <<endl;
cout << "lcm(" << m << "," << n << ") = " << lcm(m,n) <<endl;
return 0;
}
int gcd (int m,int n) //计算最大公约数
{
if (m > n) swap(m,n);
while(n > 0)
{
int r = m % n;
m = n;
n = r;
}
return m;
}
int lcm (int m,int n)//计算最小公倍数
{
return (m*n / gcd(m,n));
}
首先,这个程序没有问题,运行也正确。
小弟的疑问出现在红色字体部分,按照小弟的理解,应该改成if (m < n) swap(m,n);才对,要大的除以小的嘛。改完后试下,发现程序也没问题,运行结果也都正确。
于是我就索性把if (m > n) swap(m,n);这条语句前面直接加//,就是不让他运行。发现运行结果也正确(就是不管是<,>还是不运行,对结果都没影响),但是按照我的想法是,如果m<n,那m除以n的余数,以及后面的运算,算出来的公约数应该是错误的吧?
请教各位大哥大姐。