📄 d_8_2.cpp
字号:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Fraction {
private:
int numerator,denominator;
void optimization();
public:
Fraction(int x=0,int y=1)
: numerator(x),denominator(y)
{ optimization();
}
friend ostream& operator << (ostream&out, Fraction &c);
friend Fraction operator +(Fraction &num1,Fraction &num2);
friend Fraction operator -(Fraction &num1,Fraction &num2);
friend Fraction operator *(Fraction &num1,Fraction &num2);
friend Fraction operator /(Fraction &num1,Fraction &num2);
friend bool operator==(Fraction &num1,Fraction &num2);
};
void Fraction::optimization()
{
int gcd,min,max;
if(numerator==0)
{ //如分子为0,则置分母为1后返回
denominator=1;
return;
}
gcd=(abs(numerator)>abs(denominator)?abs(denominator):abs(numerator));
if(gcd==0) return;
if(abs(numerator)>abs(denominator))
{max=numerator;min=denominator;}
else
{min=numerator;max=denominator;}
do{
gcd=max%min;
max=min;
min=gcd;
}while(gcd!=0);
numerator/=max;
denominator/=max;
if(numerator<0 && denominator<0)
{
numerator=-numerator;
denominator=-denominator;
}
else if(numerator<0 || denominator<0)
{
numerator=-abs(numerator);
denominator=abs(denominator);
}
}
ostream& operator << (ostream&out, Fraction &c)
{ out<<c.numerator;
if(c.numerator!=0 && c.denominator!=1 &&c.denominator!=0)
cout<<"/"<<c.denominator<< endl;
else if(c.denominator==0)
cout<<"ERROR!The denominator is equal to 0."<< endl;
else cout<< endl;
return out;
}
Fraction operator +(Fraction &num1,Fraction &num2)
{
Fraction temp;
temp.denominator=num1.denominator*num2.denominator;
temp.numerator=num1.numerator*num2.denominator+
num1.denominator*num2.numerator;
temp.optimization();
return temp;
}
Fraction operator -(Fraction &num1,Fraction &num2)
{
Fraction temp;
temp.denominator=num1.denominator*num2.denominator;
temp.numerator=num1.numerator*num2.denominator-
num1.denominator*num2.numerator;
temp.optimization();
return temp;
}
Fraction operator *(Fraction &num1,Fraction &num2)
{
Fraction temp;
temp.denominator=num1.denominator*num2.denominator;
temp.numerator=num1.numerator*num2.numerator;
temp.optimization();
return temp;
}
Fraction operator /(Fraction &num1,Fraction &num2)
{
Fraction temp;
temp.denominator=num1.denominator*num2.numerator;
temp.numerator=num1.numerator*num2.denominator;
temp.optimization();
return temp;
}
bool operator==(Fraction &num1,Fraction &num2)
{
if(num1.numerator==num2.numerator &&
num1.denominator==num2.denominator)
return true;
else
return false;
}
void main()
{
Fraction r1(1,14),r2(11,12),r3(-63,789);
cout<<"r1="<<r1;
cout<<"r2="<<r2;
cout<<"r3="<<r3;
cout<<"r1+r2="<< (r1+r2);
cout<<"r1-r2="<<(r1-r2);
cout<<"r1*r3="<<(r1*r3);
cout<<"r2/r3="<<(r2/r3);
cin.get(); //等待结束,以便调测程序,可以删除
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -