編寫分數類Fraction,實現兩個分數的加、減、乘和除四則運算。主函式已給定。
YTU-OJ-分數類的四則運算【C++】
Problem B: 分數類的四則運算【C++】
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 652 Solved: 162
[Submit][Status][Web Board]
Description
Input
每行四個數,分別表示兩個分數的分子和分母,以0 0 0 0 表示結束。
Output
空格分隔的兩個分數的減和除的結果。
Sample Input
1 2 -1 2
4 3 3 4
0 0 0 0
Sample Output
1 -1
7/12 16/9
HINT
int main()
{
Fraction f1,f2,f3;
while(cin>>f1>>f2) {
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output();
f3=f1/f2;
f3.output();
cout<<endl;
}
return 0;
}
#include<iostream>
#include<cmath>
using namespace std;
class Fraction
{
private:
int nume; // 分子
int deno; // 分母
public:
int flag;
Fraction(int nu=0,int de=1); //建構函式,初始化用
void set(int nu=0,int de=1); //置值,改變值時用
void simplify(); //化簡(使分子分母沒有公因子)
void output();
Fraction operator + (const Fraction &c2);
Fraction operator - (const Fraction &c2);
Fraction operator * (const Fraction &c2);
Fraction operator / (const Fraction &c2);
bool operator == (int x);
friend istream& operator>>(istream&input,Fraction &c);
};
int gys(int a,int b)
{
return (a%b!=0?(gys(b,a%b)):b);
}
int gbs(int u,int v)
{
int h;
h=gys(u,v);
return (u*v/h);
}
Fraction::Fraction(int nu,int de)
{
if(de!=0)
{
nume=nu;
deno=de;
}
}
void Fraction::set(int nu,int de)//置值,改變值時用
{
if(de!=0)
{
nume=nu;
deno=de;
}
}
Fraction Fraction::operator + (const Fraction &c2)
{
Fraction c;
int r;
if (deno!=c.deno) //取分母的最大公倍數
{
r=gbs(deno,c2.deno);
c.nume=(nume*r/deno)+(c2.nume*r/c2.deno);
c.deno=r;
}
else
{
c.nume=nume+c2.nume;
c.deno=deno;
}
return c;
}
Fraction Fraction::operator - (const Fraction &c2)
{
Fraction c;
int r;
if (deno!=c.deno) //取分母的最大公倍數
{
r=gbs(deno,c2.deno);
c.nume=(nume*r/deno)-(c2.nume*r/c2.deno);
c.deno=r;
}
else
{
c.nume=nume-c2.nume;
c.deno=deno;
}
return c;
}
Fraction Fraction::operator * (const Fraction &c2)
{
Fraction c;
c.nume=nume*c2.nume;
c.deno=deno*c2.deno;
return c;
}
Fraction Fraction::operator / (const Fraction &c2)
{
Fraction c;
c.nume=nume*c2.deno;
c.deno=deno*c2.nume;
return c;
}
bool Fraction::operator == (int x)
{
return !((nume>x)||(nume<x));
}
void Fraction::simplify()//化簡(使分子分母沒有公因子)
{
int r;
r=gys(nume,deno);
nume/=r;
deno/=r;
}
//流插入
istream& operator>>(istream&input,Fraction &c)
{
int a,b;
input>>a>>b;
c.nume=a;
c.deno=b;
return input;
}
void Fraction::output()
{
simplify();
if(deno!=1)
{
if(nume<0||deno<0)
cout<<"-"<<fabs(nume)<<"/"<<fabs(deno);
else
cout<<nume<<"/"<<deno;
}
else
cout<<nume;
}
//下面用main()函式測試,完成輸入輸出
int main()
{
Fraction f1,f2,f3;
while(cin>>f1>>f2)
{
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output();
cout<<" ";
f3=f1/f2;
f3.output();
cout<<endl;
}
return 0;
}
相關文章
- 簡單c++實現複數的四則運算C++
- java大整數四則運算Java
- 四則運算
- YTU-OJ-實現複數類中的加運算子過載【C++運算子過載】C++
- 四則運算的開發
- 四則運算計算器
- 複數的四則運算(C語言實現)C語言
- 四則運算GUI版本GUI
- 四則運算小程式
- 四則運算----封裝封裝
- 安卓版四則運算安卓
- 四則運算——安卓版安卓
- 四則運算專案
- 四則運算手冊
- Java簡單四則運算Java
- 四則運算之總結
- 四則運算介面練習
- 帶介面的四則運算
- 四則運算--封裝5.1封裝
- 四則運算app總結APP
- 個人專案--四則運算
- 四則運算實現 (轉)
- 棧的應用——計算器的四則運算
- Object-C,四則運算計算器Object
- 四則運算之主要程式碼
- 作業:隨機四則運算隨機
- 安卓小學生四則運算安卓
- 結對專案四則運算
- 自動出題程式(10以內的數字的四則運算)
- 運算整數C/C++位運算技巧C++
- 軟體工程之四則運算--Github軟體工程Github
- 四則運算APP最後階段APP
- 四則運算 測試與封裝封裝
- 作業5.1 四則運算----封裝封裝
- 四則運算,測試與封裝。封裝
- 軟體工作四則運算測試
- python四則運算生成器Python
- 結對程式設計-四則運算程式設計