首页 > 解决方案 > 引用变量赋值逻辑

问题描述

好的,所以我正在制作一个函数,通过计算最大公因数来减少有理数,然后在减少/简化后返回新的分子和分母。例如:24/60 到 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;
  
}

该函数应返回 num = 2 和 den = 5。但是,由于某种原因,它返回 num = 5 和 den = 2。

我的主要功能看起来像这样

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

标签: c++pass-by-reference

解决方案


你正在改变numden内部while循环。该值不应更改。

请将numden变量存储在其他变量中,并使用这些值进行如下操作。

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

推荐阅读