code:
1 class fraction { 2 public: 3 fraction() { 4 numerator = 0; 5 denominator = 1; 6 } 7 fraction(long long num) { 8 numerator = num; 9 denominator = 1; 10 } 11 fraction (long long a, long long b) { 12 assert(b != 0); 13 if (b < 0) { 14 numerator = -a; 15 denominator = -b; 16 } else { 17 numerator = a; 18 denominator = b; 19 } 20 this->reduction(); 21 } 22 23 void operator = (long long num) { 24 numerator = num; 25 denominator = 1; 26 } 27 28 void operator = (const fraction &b) { 29 numerator = b.numerator; 30 denominator = b.denominator; 31 this->reduction(); 32 } 33 34 fraction operator + (const fraction &b) const { 35 long long gcdnum = gcd(denominator, b.denominator); 36 return fraction(numerator*(b.denominator/gcdnum) + b.numerator*(denominator/gcdnum), denominator/gcdnum*b.denominator); 37 } 38 39 fraction operator + (const int b) const { 40 return ((*this) + fraction(b)); 41 } 42 43 fraction operator - (const fraction &b) const { 44 return ((*this) + fraction(-b.numerator, b.denominator)); 45 } 46 47 fraction operator - (const int &b) const { 48 return ((*this) - fraction(b)); 49 } 50 51 fraction operator * (const fraction &b) const { 52 return fraction(numerator*b.numerator, denominator * b.denominator); 53 } 54 55 fraction operator * (const int &b) const { 56 return ((*this) * fraction(b)); 57 } 58 59 fraction operator / (const fraction &b) const { 60 return ((*this) * fraction(b.denominator, b.numerator)); 61 } 62 63 void reduction() { 64 if (numerator == 0) { 65 denominator = 1; 66 return; 67 } 68 long long gcdnum = gcd(abs(numerator), denominator); 69 numerator /= gcdnum; 70 denominator /= gcdnum; 71 } 72 73 public: 74 long long numerator;//分子 75 long long denominator;//分母 76 };
extra code:
long long gcd (long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
本文转自 jiu~ 博客园博客,原文链接:http://www.cnblogs.com/jiu0821/p/8303170.html,如需转载请自行联系原作者