평생 동안 내 인생을 바랄 수 없다 코드에 정상적인 분수를 입력하면 무한 값이 반환됩니다. GCD (가장 큰 공통 제수) 이외의 모든 것은 작동하는 것처럼 보입니다.분수를 완전히 줄이거 나 단순화하는 방법 (C++)
여기에 어딘가에 명백한 논리 오류가 있습니까?
나는 내 연구를 수행하고 질문에 대한 다양한 대답을 발견했다. Wikipedia가 코드를 작성한다고해도, 코드화 된 방식으로 작동하도록 만드는 방법을 알고 싶다. 그것은 지금이다.
#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <math.h>
using namespace std;
class Fraction
{
private:
double num;
double den;
double fraction;
double temp;
public:
void setNum();
void setDen();
int getNum();
int getDen();
void lcdOutput();
void decOutput();
int gcd();
};
void Fraction::setNum(){
cout << "Enter a value for your numerator: " << endl;
cin >> num;
}
void Fraction::setDen(){
cout << "Enter a value for your denominator: " << endl;
cin >> den;
}
int Fraction::getNum(){
return num;
}
int Fraction::getDen(){
return den;
}
int Fraction::gcd(){
Fraction set;
if(num > den){
if(fmod(num, den) == 0){
den = temp;
return temp;
}
else{
den = fmod(num, den);
set.gcd();
}
}
else{
if(fmod(den, num) == 0){
num = temp;
return temp;
}
else{
num = fmod(den, num);
set.gcd();
}
}
}
void Fraction::lcdOutput(){
Fraction set;
set.gcd();
num = num/temp;
den = den/temp;
cout << "Fraction in lowest terms: " << num << "/" << den << endl;
}
void Fraction::decOutput(){
double decimal = num/den;
cout.precision(4);
cout << "The fraction in decimal form is: " << decimal << endl;
}
int main(){
Fraction set;
set.setNum();
set.setDen();
set.getNum();
set.getDen();
set.lcdOutput();
set.decOutput();
return 0;
}
분수 생성자는 어디에 있습니까? 나는 'temp'가 할당되는 방법을 보지 못합니다. – Porkbutts
값을 지정하지 않고'temp'를 사용합니다. – Beta
gcd() 함수가 잘못되었습니다. 왜 새로운 분수를 만드는거야? 또한 모든 코드 경로가 실제로 값을 반환하는 것은 아닙니다. –