Search code examples
c++pass-by-reference

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

Solution

  • 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;
    }