C++编程,不知道错在哪里,求大神在线等!!!么么哒QAQ
答案:1 mip版
解决时间 2021-01-17 08:33
- 提问者网友:十年不久我陪你走
- 2021-01-16 18:49
建立分数类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
最佳答案
- 二级知识专家网友:甜心萌物酱
- 2021-01-16 19:41
你这最大公约数找的其实是最小公约数,也就是1。。。
最简单的改法:
for(i=1;i<=e;i++)
改为
for(i=e;i>=1;i--)
最简单的改法:
for(i=1;i<=e;i++)
改为
for(i=e;i>=1;i--)
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯