# Hi so Im creating a fraction calculator that also finds the gcd. My problem is that everytime I do the addition operator it comes out different from…

Hi so Im creating a fraction calculator that also finds the gcd. My problem is that everytime I do the addition operator it comes out different from what I expect.

My code is below:

#include <iostream>

using namespace std;

double gcd (int, int);

int main (){

char op, slash, repeat;

int num1, den1, num2, den2, resNum1, resNum2, big, small, ans;

do{

cout << “Enter the first fraction: “;

cin >> num1 >> slash >> den1;

while (den1 == 0){

cout << “Denominators cannot be equal to zero. Please reenter entire fraction with valid input: “;

cin >> num1 >> slash >> den1;

};

cout << “Enter operation: “;

cin >> op;

cout << “Enter the second fraction: “;

cin>> num2 >> slash >> den2;

while (den2 == 0){

cout << “Denominators cannot be equal to zero. Please reenter entire fraction with valid input: “;

cin>> num2 >> slash >> den2;

};

switch (op){

case ‘+’:

resNum1 = (num1*den2 + num2*den1);

resNum2 = (den1*den2);

if (resNum1 > resNum2){

big = num1;

small = num2;

}

else {

small = resNum1;

big = resNum2;

}

ans = gcd (small, big);

cout << resNum1/ans << “/” << resNum2/ans;

break;

case ‘-‘:

resNum1 = (num1*den2 – num2*den1);

resNum2 = (den1*den2);

if (resNum1 > resNum2){

big = num1;

small = num2;

}

else {

small = resNum1;

big = resNum2;

}

ans = gcd (small, big);

cout << resNum1/ans << “/” << resNum2/ans;

break;

case ‘/’:

resNum1 = (num1*den2);

resNum2 = (num2*den1);

if (resNum1 > resNum2){

big = num1;

small = num2;

}

else {

small = resNum1;

big = resNum2;

}

ans = gcd (small, big);

cout << resNum1/ans << “/” << resNum2/ans;

break;

case ‘*’:

resNum1 = (num1*num2);

resNum2 = (den1*den2);

if (resNum1 > resNum2){

big = num1;

small = num2;

}

else {

small = resNum1;

big = resNum2;

}

ans = gcd (small, big);

cout << resNum1/ans << “/” << resNum2/ans;

break;

default: break;

}

do{

cout << “nContinue? (y/n): “;

cin >> repeat;

} while (repeat != ‘y’ && repeat != ‘Y’ && repeat != ‘n’ && repeat != ‘N’);

} while (repeat == ‘y’ || repeat == ‘Y’);

return 0;

}

double gcd (int small, int big){

int rem;

rem = big%small;

while (rem != 0){

small = rem;

rem = big%rem;

}

return (small);

} 