// Fraction.h: interface for the Fraction class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_FRACTION_H__D7EDBF81_8F04_11D3_AE20_80533ECA5CCA__INCLUDED_) #define AFX_FRACTION_H__D7EDBF81_8F04_11D3_AE20_80533ECA5CCA__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class Fraction { //data public: int n,d; public: Fraction(); Fraction(float f) { n=int(f*10000); d=10000; Lower(); } Fraction(int i) { n=i; d=1; } virtual ~Fraction(); Fraction operator =(Fraction a); Fraction operator -() { n=-n; d=d; return *this; } Fraction operator +() { return *this; } operator float() { return float(n)/float(d); } operator int() { return n/d; } operator CString() { CString a=""; char buffer[10]; itoa(n,buffer,10); a+=CString(buffer); if(d!=1) { itoa(d,buffer,10); a+="/"+CString(buffer); } return a; } void Lower() { if(n==0) {d=1;return;} if(n==1 || d==1) return; int g=GCD(abs(n),abs(d)); if(g) { n/=g; d/=g; } } int GCD(int a,int b) { if(a==b) return a; if(a>b) return GCD(a-b,b); else return GCD(b-a,a); } friend Fraction operator +=(Fraction a,Fraction b); friend Fraction operator *(Fraction a,Fraction b); friend Fraction operator +(Fraction a,Fraction b); friend Fraction operator -(Fraction a,Fraction b); friend Fraction operator /(Fraction a,Fraction b); friend int operator >(Fraction a,Fraction b); friend int operator <(Fraction a,Fraction b); friend int operator ==(Fraction a,Fraction b); friend Fraction operator +=(Fraction&,Fraction); friend Fraction operator -=(Fraction&,Fraction); friend Fraction operator /=(Fraction&,Fraction); friend Fraction operator *=(Fraction&,Fraction); friend int operator !=(Fraction a,Fraction b); friend int operator <=(Fraction a,Fraction b); friend int operator >=(Fraction a,Fraction b); }; #endif // !defined(AFX_FRACTION_H__D7EDBF81_8F04_11D3_AE20_80533ECA5CCA__INCLUDED_)