/* Copyright (c) 2016
* All rights reserved
* 文件名称:3.cpp
* 作者:刘丽
* 完成日期:2016年 4 月 5日
* 版本号: v1.0
*
* 问题描述:建立一个关于分数的类
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume;//分子
int deno;//分母
int s=1;//倍数
public:
CFraction(int nu,int de);//构造函数,初始化用
void set (int nu,int de);//置值,改变值时用
void input();//按照“nu/de”的格式,如“5/2”的形式输入
void simplify();//化简(使分子分母没有公因子)
void amplify(int n);//放大n倍,如2/3放大5倍为10/3
void output(int style);//输出:以8/6为例,style为0时,原样输出8/6;
//style为1时,输出化简后形式4/3;
//style为2时,输出1(1/3)形式,表示一有三分之一
//style为3时,用小数形式输出,如1.3333;
//默认方式0
};
CFraction::CFraction(int nu=0,int de=1):nume(nu),deno(de){
}
void CFraction::set (int nu=0,int de =1)
{
char a;
cin>>nume>>a>>deno;
}
void CFraction::input()
{
char a;
cin>>nume>>a>>deno;
}
void CFraction::simplify()
{
int n;
n=deno;
if(deno>nume)
n=nume;
for(;n>0;n--)
{
if(nume%n==0&&deno%n==0)
{
nume/=n;
deno/=n;
s*=n;
break;
}
}
}
void CFraction::amplify(int n)
{
nume*=n;
s*=n;
}
void CFraction::output(int style=0)
{
int m=0;
if(nume>deno)
m=nume%deno;
switch(style)
{
case 0:cout<<s*nume<<"/"<<s*deno<<endl;break;
case 1:if(nume%deno==0)
cout<<nume/deno<<endl;
else
cout<<nume<<"/"<<deno<<endl;break;
case 2:if(m==0)
cout<<nume<<"/"<<deno<<endl;
else
cout<<nume/deno<<"("<<m<<"/"<<deno<<")"<<endl;break;
case 3:cout<<1.0*nume/deno<<endl;break;
}
}
int main()
{
CFraction c1;
int style,n;
c1.input();
cout<<"输入表达方式"<<endl;
cin>>style;
c1.output(style);
cout<<"想要放大多少倍:"<<endl;
cin>>n;
c1.amplify(n);
c1.simplify();
cout<<"输入表达方式"<<endl;
cin>>style;
c1.output(style);
return 0;
}