[cpp]
/*
* 程序的版權和版本聲明部分
* Copyright (c)2012, 煙台大學計算機學院學生
* All rightsreserved.
* 文件名稱: object.cpp
* 作者:紀子龍
* 完成日期: 2013年3 月 21 日
* 版本號: v1.0
* 輸入描述:無
* 問題描述:無
* 程序輸出:無
/*
* 程序的版權和版本聲明部分
* Copyright (c)2012, 煙台大學計算機學院學生
* All rightsreserved.
* 文件名稱: object.cpp
* 作者:紀子龍
* 完成日期: 2013年3 月 21 日
* 版本號: v1.0
* 輸入描述:無
* 問題描述:無
* 程序輸出:無[cpp] view plaincopyprint?*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
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)形式,表示一又三分之一;
//style為3時,用小數形式輸出,如1.3333;
//不給出參數和非1、2,認為是方式0
};
void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式輸入
{
cout<<"please input nume deno"<<endl;
cin>>nume>>deno;
}
void CFraction::simplify() //化簡(使分子分母沒有公因子)
{
int a,b,c,d;
int num1,num2,temp;
num1=nume;
num2=deno;
c=nume;
d=deno;
if(num1>num2) /*找出兩個數中的較大值*/
{
temp=num1; num1=num2; num2=temp; /*交換兩個整數*/
}
a=num1; b=num2;
while(b!=0) /*采用輾轉相除法求最大公約數*/
{
temp=a%b;
a=b;
b=temp;
}
c=c/a;
d=d/a;
cout<<c<<"/"<<d<<endl;
}
void CFraction::amplify(int n) //放大n倍,如2/3放大5倍為10/3
{
int a,b;
a=nume;
b=deno;
a=a*n;
b=b*n;
cout<<a<<"/"<<b<<endl;
}
void CFraction::output(int style)
{
if(style==3)
{
int a,b,e,t,i,c=3;
a=nume;
b=deno;
if (a>b)
{
cout<<a/b<<".";
for (i=1;i<c+1;i++)
{
t=a*10/b;
e=a%b;
a=e;
cout<<t;
}
}
cout<<endl;
if (a<b)
{
cout<<"0.";
for (i=1;i<c+1;i++)
{
t=a*10/b;
e=a%b;
a=e;
cout<<t;
}
cout<<endl;
}
}
else
{
if(style==2)
{
int a,b,c=0;
a=nume;
b=deno;
while(a>=b)
{
a=a-b;
c++;
}
if(a==0)
cout<<c<<endl;
else
cout<<c<<"("<<a<<"/"<<b<<")"<<endl;
}
else
{
if(style==1)
{
int a,b,c,d;
int num1,num2,temp;
num1=nume;
num2=deno;
c=nume;
d=deno;
if(num1>num2) /*找出兩個數中的較大值*/
{
temp=num1; num1=num2; num2=temp; /*交換兩個整數*/
}
a=num1; b=num2;
while(b!=0) /*采用輾轉相除法求最大公約數*/
{
temp=a%b;
a=b;
b=temp;
}
c=c/a;
d=d/a;
cout<<c<<"/"<<d<<endl;
}
else
{
cout<<nume<<"/"<<deno<<endl;
}
}
}
}
int main()
{
CFraction num1;
num1.input();
num1.amplify(3);
num1.simplify();
num1.output(1);
num1.output(2);
num1.output(3);
num1.output(0);
return 0;
}
運行結果:
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
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)形式,表示一又三分之一;
//style為3時,用小數形式輸出,如1.3333;
//不給出參數和非1、2,認為是方式0
};
void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式輸入
{
cout<<"please input nume deno"<<endl;
cin>>nume>>deno;
}
void CFraction::simplify() //化簡(使分子分母沒有公因子)
{
int a,b,c,d;
int num1,num2,temp;
num1=nume;
num2=deno;
c=nume;
d=deno;
if(num1>num2) /*找出兩個數中的較大值*/
{
temp=num1; num1=num2; num2=temp; /*交換兩個整數*/
}
a=num1; b=num2;
while(b!=0) /*采用輾轉相除法求最大公約數*/
{
temp=a%b;
a=b;
b=temp;
}
c=c/a;
d=d/a;
cout<<c<<"/"<<d<<endl;
}
void CFraction::amplify(int n) //放大n倍,如2/3放大5倍為10/3
{
int a,b;
a=nume;
b=deno;
a=a*n;
b=b*n;
cout<<a<<"/"<<b<<endl;
}
void CFraction::output(int style)
{
if(style==3)
{
int a,b,e,t,i,c=3;
a=nume;
b=deno;
if (a>b)
{
cout<<a/b<<".";
for (i=1;i<c+1;i++)
{
t=a*10/b;
e=a%b;
a=e;
cout<<t;
}
}
cout<<endl;
if (a<b)
{
cout<<"0.";
for (i=1;i<c+1;i++)
{
t=a*10/b;
e=a%b;
a=e;
cout<<t;
}
cout<<endl;
}
}
else
{
if(style==2)
{
int a,b,c=0;
a=nume;
b=deno;
while(a>=b)
{
a=a-b;
c++;
}
if(a==0)
cout<<c<<endl;
else
cout<<c<<"("<<a<<"/"<<b<<")"<<endl;
}
else
{
if(style==1)
{
int a,b,c,d;
int num1,num2,temp;
num1=nume;
num2=deno;
c=nume;
d=deno;
if(num1>num2) /*找出兩個數中的較大值*/
{
temp=num1; num1=num2; num2=temp; /*交換兩個整數*/
}
a=num1; b=num2;
while(b!=0) /*采用輾轉相除法求最大公約數*/
{
temp=a%b;
a=b;
b=temp;
}
c=c/a;
d=d/a;
cout<<c<<"/"<<d<<endl;
}
else
{
cout<<nume<<"/"<<deno<<endl;
}
}
}
}
int main()
{
CFraction num1;
num1.input();
num1.amplify(3);
num1.simplify();
num1.output(1);
num1.output(2);
num1.output(3);
num1.output(0);
return 0;
}
運行結果: