大众信息网

C++编程,不知道错在哪里,求大神在线等!!!么么哒QAQ

关注:278  答案:1  手机版
解决时间 2021-01-17 08:33
建立分数类Fraction,用于表示最简分数。最简分数为分子分母没有公约数的分数。该分数类重装运算符+和-,分别实现两个分数的加法和减法。具体要求如下: (1)私有数据成员 ?int m:分子。 ?int n:分母。 (2)公有成员函数 ?Fraction(int _m,int _n):构造函数,用_m、_n分别初始化m、n,同时对分数进行约简,使其成为最简分数。 ?int gcd(int x,int y):求x和y的最大公约数(对分数进行约简时用到),注意结果要为正数。 ?Fraction operator+(Fraction &b):重载双目加法运算。 ?Fraction operator-(Fraction &b):重载双目减法运算。 ?void show():输出分数,格式为m/n。 (3)在主函数中完成对该类的测试。定义分数a和b,其初值分别为-1/3与6/12,求出它们的和与差并分别赋值给分数c和d,最后输出c和d。正确的运行结果为: 1/6 -5/6 #include<iostream> using namespace std; class Fraction { private: int m;//分子 int n;//分母 public: int gcd(int x,int y) { int i,p,q,e,f; if(x<0) { e=-x; } else e=x; if(y<0) { f=-y; } else f=y; for(i=1;i<=e;i++) { if(e%i==0) { p=i; if(f%p==0) q=p; break; } } return q; } Fraction(int _m,int _n) { _m=m; _n=n; int x=gcd(m,n); m/=x; n/=x; } Fraction operator+(Fraction &b) { m=m*b.n+n*b.m; n=n*b.n; int x=gcd(m,n); m/=x; n/=x; return *this; } Fraction operator-(Fraction &b) { m=m*b.n-n*b.m; n=n*b.n; int x=gcd(m,n); m/=x; n/=x; return *this; } void show() { cout<<m<<"/"<<n<<endl; } }; int main() { Fraction a1(-1,3); Fraction b1(6,12); Fraction c(0,0); c=a1+b1; c.show(); Fraction a2(-1,3); Fraction b2(6,12); Fraction d(0,0); d=a2-b2; d.show(); return 0; } 好像是说求最大公约数那里有错!!!!说好的大神在哪里!!!!TUT
最佳答案
你这最大公约数找的其实是最小公约数,也就是1。。。
最简单的改法:
for(i=1;i<=e;i++)

改为
for(i=e;i>=1;i--)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!