[英]Fraction calculator c++
Iam試圖找出一種方法來添加兩個分數並根據輸出以最低形式或混合形式獲得結果分數,但問題是當我使用相同的分母輸入兩個分數時,它會使其他所有東西都正常工作這是我到目前為止的代碼
#include<cmath>
#include<iostream>
using namespace std;
void reduce_fraction(int &numerator, int &denominator);
void addFractions(int numerator1Par, int denominator1Par, int numerator2Par, int denominator2Par);
int main(){
int numerator1 = 0;
int denominator1 = 0;
int numerator2 = 0;
int denominator2 = 0;
int unfactoredNumerator = 0;
int resultDenominator = 0;
int mixedNumberRemainder = 0;
int mixedNumberWhole = 0;
int reducedNumerator = 0;
int reducedDenominator = 0;
int result;
int greatCommonDenominator;
cout << "Enter first numerator: ";
cin >> numerator1;
cout << "Enter first denominator: ";
cin >> denominator1;
cout << endl;
cout << "Enter second numerator: ";
cin >> numerator2;
cout << "Enter second denominator: ";
cin >> denominator2;
cout << endl;
if (denominator1 == denominator2)
{
result = numerator1 + numerator2;
if (unfactoredNumerator>resultDenominator){
int a = unfactoredNumerator / resultDenominator;
int b = unfactoredNumerator - (a*resultDenominator);
cout << numerator1 << "/" << denominator1 << " + " << numerator2 << "/" << denominator2 << " = " << a << " " << b << "/" << resultDenominator << endl;
}
else
{
if (unfactoredNumerator == 0 && resultDenominator == 0)
greatCommonDenominator = 1;
else if (resultDenominator == 0)
greatCommonDenominator = unfactoredNumerator;
else if (unfactoredNumerator != 0) {
int a = unfactoredNumerator, b = resultDenominator;
while (a != b)
if (a < b)
b -= a;
else
a -= b;
greatCommonDenominator = b;
}
cout << numerator1 << "/" << denominator1 << " + " << numerator2 << "/" << denominator2 << " = " << (unfactoredNumerator / greatCommonDenominator) << "/" << (resultDenominator / greatCommonDenominator) << endl;
}
}
else
{
addFractions(numerator1, denominator1, numerator2, denominator2);
}
system("pause>nul");
return 0;
}
void reduce_fraction(int &numerator, int &denominator)
{
for (int i = denominator * numerator; i > 1; i--) {
if ((denominator % i == 0) && (numerator % i == 0))
{
denominator /= i;
numerator /= i;
}
}
}
void addFractions(int numerator1Par, int denominator1Par, int numerator2Par, int denominator2Par) {
int unfactoredNumerator;
int resultDenominator;
int greatCommonDenominator;
unfactoredNumerator = numerator1Par * denominator2Par + numerator2Par * denominator1Par;
resultDenominator = denominator1Par * denominator2Par;
if (unfactoredNumerator>resultDenominator){
int a = unfactoredNumerator / resultDenominator;
int b = unfactoredNumerator - (a*resultDenominator);
cout << numerator1Par << "/" << denominator1Par << " + " << numerator2Par << "/" << denominator2Par << " = " << a << " " << b << "/" << resultDenominator << endl;
}
else
{
if (unfactoredNumerator == 0 && resultDenominator == 0)
greatCommonDenominator = 1;
else if (resultDenominator == 0)
greatCommonDenominator = unfactoredNumerator;
else if (unfactoredNumerator != 0) {
int a = unfactoredNumerator, b = resultDenominator;
while (a != b)
if (a < b)
b -= a;
else
a -= b;
greatCommonDenominator = b;
}
cout << numerator1Par << "/" << denominator1Par << " + " << numerator2Par << "/" << denominator2Par << " = " << (unfactoredNumerator / greatCommonDenominator) << "/" << (resultDenominator / greatCommonDenominator) << endl;
}
}
當分母相同時,您無需初始化unfactoredNumerator和resultDenominator,因此它們始終為零。 另外,在除以resultDenominator之前,您無需檢查是否為零。 (並且您應該檢查分子和分母的傳入值是否為零,並相應地處理這些情況。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.