/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱:
* 作 者: 晁陽
* 完成日期: 2012 年 03 月 20 日
* 版 本 號:t 1.0
#include < iostream>
using namespace std;
class CFraction
{private:
int nume; // 分子
int deno;// 分母
//int i;
public:
CFraction(int nu=0,int de=1):deno(de),nume(nu){}; //構造函數,初始化用
void Set(int nu=0,int de=1); //置值,改變值時用
void input(); //按照"nu/de"的格式,如"5/2"的形式輸入
void Simplify(); //化簡(使分子分母沒有公因子)
void amplify(int n); //放大n倍,如2/3放大5倍爲10/3
void output(int style=0); //輸出:以8/6爲例,style爲0時,輸出8/6;
//style爲1時,輸出4/3;
//style爲2時,輸出1(1/3),表示一又三分之一;
//不給出參數和非1、2,認爲是方式0
};
void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式輸入
{
char c1;
cout <<"請輸入一個分數(格式nu/de):";
while(1)
{
cin >> nume >> c1 >> deno;
if ( c1 !='/' )
{
cout << "輸入格式不正確,請重新輸入!";
}
else
break;
}
}
void CFraction::Simplify() //化簡(使分子分母沒有公因子)
{ int i;
if( deno < nume )
i = deno;
else
i = nume;
for( ; i > 0; --i)//大於0啊,早晚讓它折磨死!!!!!!!!
{
if ( nume % i == 0 && deno % i == 0 )
{
nume = nume/i;
deno = deno/i;
break;
}
}
}
void CFraction::amplify(int n) //放大n倍,如2/3放大5倍爲10/3
{
nume = nume * n;
}
void CFraction::output(int style) //輸出:以8/6爲例,style爲0時,輸出8/6;
{
switch ( style )
{
case 0://不給出參數和非1、2,認爲是方式0
cout<<nume<<"/"<<deno<<endl;break;
case 1://style爲1時,輸出4/3;
Simplify();
cout<<nume<< "/" << deno <<endl;break;
case 2://style爲2時,輸出1(1/3),表示一又三分之一;
cout<<nume/deno<< "(" << nume%deno<<"/"<<deno<<")"<<endl;break;
}
}
void main()
{
CFraction CF;
CF.input();
CF.output();
CF.amplify(2);
CF.Simplify();
CF.output();
CF.output(1);
CF.output(2);
system("PAUSE");
}