如何实现最大公约数以简化分数
How to implement greatest common divisor to simplify fractions
#include <iostream>
using namespace std;
int g_c_d(int n, int d);
class Fraction
{
private:
//variables to store numerator and denominator
int num;
int denom;
public:
Fraction(){}
Fraction(int num): num(num) {}
Fraction(int num, int denom): num(num), denom(denom) {}
void set_num(int n){ num = n;}
void set_denom(int d){ denom = d;}
int get_numerator() const {return num;}
int get_denominator() const {return denom;}
};
int g_c_d(int n, int d){
return d == 0? n : g_c_d(d, n % d);
}
istream &operator>> (istream &input, Fraction &f)
{
int n, d;
char slash;
input >> n;
input >> slash;
input >> d;
if (d == 0) {n = 0;} //if denom is 0; fraction = 0/0
f = Fraction(n, d);
return input;
}
ostream &operator<<(ostream &output, const Fraction &frac)
{
return output << frac.get_numerator() << "/" << frac.get_denominator();
}
int main()
{
int n, d;
Fraction frac;
int gcd;
n = frac.get_numerator();
d = frac.get_denominator();
gcd = g_c_d(frac.get_numerator() , frac.get_denominator());
cout << "Enter a fraction" << endl;
cin >> frac;
frac.set_num(n/gcd);
frac.set_denom(d/gcd);
cout << "your fraction is: ";
cout << frac << endl;
return 0;
}
嗨,我试图简化用户输入的分数。但是,每次我输入要简化的分数时,返回的输出都是"1/0"。
有人可以帮忙吗,将不胜感激!
问题是,在要求用户输入分数之前,你对frac
进行了所有计算,然后你覆盖了用户输入的任何内容。您需要移动此位:
cout << "Enter a fraction" << endl;
cin >> frac;
要高得多。
当您设置代码时,您拥有:
Fraction frac;
这将调用 Fraction
的默认构造函数。由于您从未初始化过构造函数中的成员,因此您将获得 int
类型的默认初始化,即 0。然后:
n = frac.get_numerator();
d = frac.get_denominator();
这使得n
和d
为 0。从那时起,您将使用n
和d
的值。但是,这些值不是用户输入frac
的值,而只是您从默认值中获得的值。在执行任何计算之前,将代码更改为读取用户输入的frac
值。
这里要学习的主要教训是确保不使用未初始化的变量。一般来说,当您在启用所有警告的情况下进行编译时,这是编译器会警告的事情。
您可能跳水为零,因为默认构造函数不会为分母赋值。 在分母设置为零的情况下,gcd() 函数将在 main
中第一次除以零。
相关文章:
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 如何在这个简单的最小示例中实现多态性?
- 在 cpp 中最简单的图形实现
- 简单的最大除数问题 c++ 实现抛出时间限制已超出
- 最大化双分区的 GCD(最大公约数)之和?
- 最大公因数函数
- 多项式最大公约数C++
- 实现欧几里得除法,根据两个正整数的线性组合编写这两个正整数的最大公约数
- 使用数组的 2 个数字的最大公约数
- 在编译时找到最大公约数
- 最大子阵列程序实现未终止
- 如何使用hashtable在最小堆上实现O(1)删除
- 自定义最小-最大关闭按钮实现
- C++最大公约数循环
- 直到n的所有数的最大公约数与n的和
- c++程序计算最大公约数
- 使用欧几里得算法识别两个值的最大公约数 (GCD)
- 找出最大公约数的程序
- 最小大小的实现bool数组
- 是否有标准::累计最小值的实现