1
분자와 분모의 lcm을 사용하여 두 분수의 합을 계산하고 싶습니다. 이는 결과적으로 축소 된 형태로 소수를 얻고 싶다는 것을 의미합니다. 나는 다음의 cpp 파일을 가지고있다.분수에 대한 연산자 + 오버플로 (lcm 사용)
#include <iostream> //need it for cin and cout
#include "fraction.h"
Fraction::Fraction()
{
num = 1;
den = 1;
}
Fraction::Fraction(int n, int d)
{
int tmp_gcd = gcd(n, d);
num = n/tmp_gcd;
den = d/tmp_gcd;
}
int Fraction::gcd(int a, int b)
{
int tmp_gcd = 1;
// Implement GCD of two numbers;
return tmp_gcd;
}
int Fraction::lcm(int a, int b)
{
return a * b/gcd(a, b);
}
Fraction operator+(const Fraction&a,const Fraction &b)
{
int c=(lcm(b.den,a.den)/b.den)*a.num+b.num*(lcm(b.den,a.den)/a.den);
int d=lcm(b.den,a.den);
Fraction result(c,d);
return result;
}
그러나이 코드에는 lcm이 정의되어 있지 않으므로이 코드는 작동하지 않습니다.
이 범위에서 lcm이 작동하는 데 필요한 키는 무엇입니까? 더 설명해 주시면 감사하겠습니다.
'lcm'은 아마도'class Fraction '의 공용 인터페이스의 일부가 아니지만 네임 스페이스 범위에서 도우미 함수로 구현 파일로 이동할 수 있습니다. 'gcd '도. –
고마워요! 또 다른 빠른 질문. 내부 연결이 설정되어야하기 때문에 정적으로 선언됩니까? –
@ user3501 : 아니요, 멤버 함수'static '은 어떤 객체와도 독립적으로 클래스 자체와 관련이 있음을 의미합니다. 정적이지 않은 경우 객체에 호출해야합니다. 'something.lcm (a, b)', 어떤 의미가 없습니다. 벤 보이트 (Ben Voigt)가 말했듯이, 회원이되지 않는 것이 더 합리적 일 수 있습니다. 그러나 그것이 그렇다면, 정적 일 필요가 있습니다. –