YTU-OJ-スコアクラスの四則演算【C++】
3208 ワード
Problem B:スコアクラスの四則演算【C++】
Time Limit: 1 Sec
Memory Limit: 128 MB
Submit: 652
Solved: 162
[ Submit][ Status][ Web Board]
Description
スコアクラスFractionを作成し、2つのスコアの加算、減算、乗算、除算の4つの演算を実現します.メイン関数が指定されています.
Input
行ごとに4つの数、それぞれ2つの分数の分子と分母を表し、0 0 0 0で終わりを表す.
Output
スペースで区切られた2つのスコアの減算と減算の結果.
Sample Input
Sample Output
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< } return 0; }
Time Limit: 1 Sec
Memory Limit: 128 MB
Submit: 652
Solved: 162
[ Submit][ Status][ Web Board]
Description
スコアクラスFractionを作成し、2つのスコアの加算、減算、乗算、除算の4つの演算を実現します.メイン関数が指定されています.
Input
行ごとに4つの数、それぞれ2つの分数の分子と分母を表し、0 0 0 0で終わりを表す.
Output
スペースで区切られた2つのスコアの減算と減算の結果.
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< } return 0; }
#include
#include
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>(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<>f1>>f2)
{
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output();
cout<