Jordan Molina
Jordan Molina

Reputation: 27

Reference variable assignment logic

Okay, so I'm making a function that reduces a rational number by calculating the greatest common factor, and then returns the new numerator and denominator after reducing/simplifying. Ex: 24/60 to 2/5.

void reduce(int &num, int &den){
  int remainder = num % den;

  while(remainder!=0){
    num = den;
    den = remainder;
    remainder = num % den;
    cout << "gcf: " << remainder << endl;
    break;
  }
    num = num / remainder;
    den = den / remainder;
  
}

The function should return num = 2 and den = 5. However, for some reason, it's returning num = 5 and den = 2.

My main function looks like this

int main() {
    int num = 24;
    int den = 60;
    reduce(num, den);
    cout << num << " " << den;
    // Output: 
    // gcf: 12
    // 5 2

Upvotes: 0

Views: 42

Answers (1)

Derek Wang
Derek Wang

Reputation: 10204

You are changing num and den inside while loop. That value should not be changed.

Please store num and den variables inside other variable and do the operation using those values as follows.

void reduce(int &num, int &den){
  int remainder = num % den;

  int tempNum = num, tempDen = den;
  while(remainder != 0){
    tempNum = tempDen;
    tempDen = remainder;
    remainder = tempNum % tempDen;
    cout << "gcf: " << remainder << endl;
    break;
  }
  num = num / remainder;
  den = den / remainder;
}

int main() {
    int num =24;
    int den = 60;
    reduce(num,den);
    cout << num << " " << den;
    return 0;
}

Upvotes: 1

Related Questions