⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fraction.cpp

📁 分数类
💻 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 + -