#include <iostream>
#include <cmath>
using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(){nume=0;deno=0;}
CFraction(int nu,int de):nume(nu),deno(de) {} //使用默认参数的构造函数,并初始化//置值,改变值时用//按照"nu/de"的格式,如"5/2"的形式输入
void simplify(); //化简(使分子分母没有公因子)
CFraction operator*(int &n);
CFraction operator~(); //取倒数运算
friend ostream&operator<<(ostream&,CFraction&);
friend istream&operator>>(istream&,CFraction&);
//style为1时,输出化简后形式4/3;
//style为2时,输出1(1/3)形式,表示一又三分之一;
//style为3时,用小数形式输出,如1.3333;
//默认方式0
};
istream&operator>>(istream&in,CFraction&c)
{
char r;
in>>c.nume>>r>>c.deno;
return in;
}
void CFraction::simplify()//化简
{
int i,t;
if(nume>deno)
{
t=nume;
}
else
{
t=deno;
}
for(i=2; i<sqrt(t); i++)
{
while(nume%i==0&&deno%i==0)
{
nume/=i;
deno/=i;
}
}
}
CFraction CFraction::operator*(int &n)//扩大n倍
{
return CFraction(nume*n,deno);
}
CFraction CFraction::operator~()//取倒数
{
return CFraction(deno,nume);
}
ostream&operator<<(ostream&out,CFraction&c)
{
out<<c.nume<<"/"<<c.deno;
return out;
}
int main()
{
CFraction c1,c2;
cout<<"输入一个分数(按分子/分母形式):";
cin>>c1;
cout<<"输入扩大倍数:";
int n;
cin>>n;
c2=c1*n;
cout<<"倒数为:";
c2=~c2;
cout<<c2;
c2.simplify();
cout<<"化简后:"<<c2;
return 0;
}
运行结果: