📄 fraction.cpp
字号:
#include "fraction.h"
Fraction::Fraction(int n,int d) //构造函数
{
numer=n;
demo=d;
}
ostream& operator <<(ostream& output,Fraction& f) //重载流提取运算符">>"
{
if(f.demo==1)
output<<f.numer;
else
output<<f.numer<<"/"<<f.demo;
return output;
}
istream& operator>>(istream& input,Fraction& f) //重载流插入运算符"<<"
{
char c;
cout<<"输入 Fraction :";
input>>f.numer>>c>>f.demo;
while(c!='/')
{
cout<<"输入错误!请重新输入:";
input>>f.numer>>c>>f.demo;
}
while(f.demo==0)
{
cout<<"输入错误,分母为零!请重新输入:";
input>>f.numer>>c>>f.demo;
}
return input;
}
int Gcd(int a,int b) //计算最大公因子
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
return a;
}
int Lcm(int a,int b) //计算最小公倍数
{
return (a*b/Gcd(a,b));
}
int Fraction::getDemo() //访问分母
{
return demo;
}
int Fraction::getNumer() //访问分子
{
return numer;
}
const Fraction operator+(const Fraction &f1,const Fraction &f2) //重载运算符“+”
{
Fraction result;
int n,d,gcd;
n=f1.numer*f2.demo+f1.demo*f2.numer;
d=f1.demo*f2.demo;
gcd=Gcd(n,d);
result.demo=d/gcd;
result.numer=n/gcd;
return result;
}
const Fraction operator-(const Fraction &f1,const Fraction &f2)//重载运算符“-”
{
Fraction result;
int n,d,gcd;
n=f1.numer*f2.demo-f1.demo*f2.numer;
d=f1.demo*f2.demo;
if(n<0)
gcd=Gcd(-n,d);
else
gcd=Gcd(n,d);
result.demo=d/gcd;
result.numer=n/gcd;
return result;
}
const Fraction operator*(const Fraction &f1,const Fraction &f2)//重载运算符“*”
{
Fraction result;
int n,d,gcd;
n=f1.numer*f2.numer;
d=f1.demo*f2.demo;
gcd=Gcd(n,d);
result.demo=d/gcd;
result.numer=n/gcd;
return result;
}
const Fraction operator/(const Fraction &f1,const Fraction &f2)//重载运算符“/”
{
Fraction result;
int n,d,gcd;
if(f2.numer==0)
throw DivbyZero();
else{
n=f1.numer*f2.demo;
d=f1.demo*f2.numer;
gcd=Gcd(n,d);
result.demo=d/gcd;
result.numer=n/gcd;
}
return result;
}
Fraction Fraction::operator-() //重载单目“-”运算符
{
Fraction result;
result.numer=-numer;
result.demo=demo;
return result;
}
Fraction Fraction::Reduce()//约分函数
{
Fraction result;
int temp;
temp=Gcd(numer,demo);
result.numer=numer/temp;
result.demo=demo/temp;
return result;
}
Fraction Fraction::Reciprocal()//倒数函数
{
Fraction result;
result.numer=demo;
result.demo=numer;
return result;
}
void Fraction::tf(Fraction &f) //通分函数
{
int temp;
Fraction result;
temp=Lcm(demo,f.demo);
result.numer=temp/demo*numer;
result.demo=temp;
f.numer=temp/f.demo*f.numer;
f.demo=temp;
cout<<result<<","<<f<<endl;
}
const int operator>(const Fraction &f1,const Fraction &f2) //重载运算符“>”
{
if((f1-f2).numer>0)
return 1;
else
return 0;
}
const int operator>=(const Fraction &f1,const Fraction &f2)//重载运算符“>=”
{
if((f1-f2).numer>=0)
return 1;
else
return 0;
}
const int operator<(const Fraction &f1,const Fraction &f2)//重载运算符“<”
{
if((f1-f2).numer<0)
return 1;
else
return 0;
}
const int operator<=(const Fraction &f1,const Fraction &f2)//重载运算符“<=”
{
if((f1-f2).numer<=0)
return 1;
else
return 0;
}
const int operator==(const Fraction &f1,const Fraction &f2)//重载运算符“==”
{
if((f1-f2).numer==0)
return 1;
else
return 0;
}
const int operator!=(const Fraction &f1,const Fraction &f2)//重载运算符“!=”
{
if((f1-f2).numer!=0)
return 1;
else
return 0;
}
int Fraction::digit_number() //计算数字个数函数
{
int count=0;
int n,d;
n=numer;d=demo;
while(n!=0)
{
n/=10;
count++;
}
while(d!=0)
{
d/=10;
count++;
}
return count;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -