另一种分数写法

#include<iostream>
using namespace std;
class CFraction
{private:
	int nume;  // 分子
	int deno;  // 分母
 public:
	CFraction(int,int);   //构造函数,初始化用
	void xiaoshu();
	void set(int nu=0,int de=1);    //置值,改变值时用
	void input();			//按照"nu/de"的格式,如"5/2"的形式输入
	void simplify();				//化简(使分子分母没有公因子)
	void amplify();//输出1(1/3)形式,表示一又三分之一;
	void output(int style);		//输出:以8/6为例,style为0时,原样输出8/6;
								//style为1时,输出化简后形式4/3;
								//style为2时,输出1(1/3)形式,表示一又三分之一;
								//style为3时,用小数形式输出,如1.3333;
								//不给出参数和非1、2,认为是方式0
};
int gcd(int m,int n);
int main(){
	 int style;
	CFraction s(8,6);
	cout<<"默认参数时:"<<endl;
	cout<<"请选择功能:0,原样输出;1,输出化简后的形式;2,输出真分数形式;3,输出小数形式"<<endl;
	 cin>>style;
	s.output(style);
	cout<<"自定义参数时:";
	s.input();
    	cout<<"请选择功能:0,原样输出;1,输出化简后的形式;2,输出真分数形式;3,输出小数形式"<<endl;
	 cin>>style;
    s.output(style);
    return 0;
}
CFraction::CFraction(int nu=0,int de=1){
    nume=nu;
    deno=de;
}
void CFraction::set(int nu,int de){
    nume=nu;
    deno=de;

}
void  CFraction::input()  
{  
    char c;  
    while(1)  
    {  
        cout<<"请按照nu/de格式输入分子分母"<<endl;  
        cin>>nume>>c>>deno;  
        if(c!='/')  
            cout<<"输入格式错误!\n ";  
        else if (deno==0)  
            cout<<"分母不能为零!\n ";  
        else  
            break;  
    } 
	
}  
int gcd(int m,int n){
	int r;
	r=m<=n?m:n;
	for(int i=r;i>0;i--){
		if(m%i==0&&n%i==0)
		{r=i;
		break;}
	}
	 
return r;

}
void CFraction::simplify(){
	int n;
	n=gcd(deno,nume);
	
	deno=deno/n;
	nume=nume/n;
   
}
void CFraction::amplify(){
	simplify();
	int n;
	int i;
	n=nume/deno;
	i=nume%deno;
	if(n>0){
		cout<<n<<"("<<i<<"/"<<deno<<")"<<endl;}
	else
	{
		cout<<i<<"/"<<deno<<endl;
	}
};
void CFraction::xiaoshu(){
	int  i=0;
	int a;
	int n;
	cout<<nume/deno<<".";
	for(i;i<5;i++){
		n=nume%deno*10;
		if(n==0) {cout<<0;break;}
		cout<<n/deno<<' ';
		nume=n;
	}

}
void CFraction::output(int style=0){
	char a;
    switch(style){
        case (0):cout<<nume<<"/"<<deno;break;
        case(1):simplify(); cout<<nume<<"/"<<deno<<endl;break;
		case(2):amplify();break;
		case(3):xiaoshu();break;
    }
	cout<<"继续使用请按y,退出请按b"<<endl;
	cin>>a;
	if(a=='y'){
			cout<<"请选择功能:0,原样输出;1,输出化简后的形式;2,输出真分数形式;3,输出小数形式"<<endl;
	 cin>>style;
	 output(style);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值