今天在小甲魚老師的視頻中學到了運算符重載知識,並通過實例進行了講解,先將源代碼向大家分享
至今扔沒有完全搞懂歐幾里得的具體原理,歡迎大家多多交流。
部分轉載:http://blog.csdn.net/zjsxzjb/article/details/6262667
求兩個數的最大公約數:
(1)迭代版本
int ITERATIVE-GCD(int a, int b) {
int r = a % b;
while (r) {
a = b;
b = r;
r = a % b;
}
return b;
}
(2)遞歸版本
int RECURSIVE-GCD(int a, int b) {
if (b == 0) return a; else return RECURSIVE-GCD(b, a % b);
}
(3)運算符重載
#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
class Rational
{
public:
Rational(int num,int denomi);
Rational operator+(Rational x);//運算符重載
Rational operator-(Rational x);
Rational operator*(Rational x);
Rational operator/(Rational x);
void print();
private:
int numerator;//分子
int denominator;//分母
void normalize();//歸一化處理,比如將2/16變成1/8
};
Rational::Rational(int num,int denomi)
{
numerator=num;
denominator=denomi;
normalize();
}
void Rational::normalize()
{
if(denominator<0)
{
numerator=-numerator;
denominator=-denominator;
}
//歐幾里得算法
int a = abs(numerator);
int b = abs(denominator);
//求兩個數的最大公約數
while(b>0)
{
int t=a%b;
a=b;
b=t;
}
//分子,分母分別除以最大公約數,得到最簡式子
numerator/=a;
denominator/=a;
}
//a c a*d+b*c
//— + — = ——————
//b d b*d
Rational Rational::operator+(Rational x)
{
int a=numerator;
int b=denominator;
int c=x.numerator;
int d=x.denominator;
int e=a*d+c*b;
int f=b*d;
return Rational(e,f);
}
Rational Rational::operator-(Rational x)
{
x.numerator=-x.numerator;//減相當於加負數
return operator+(x);
}
//a c a*c
//— * — = ——————
//b d b*d
Rational Rational::operator*(Rational x)
{
int a=numerator;
int b=denominator;
int c=x.numerator;
int d=x.denominator;
int e=a*c;
int f=b*d;
return Rational(e,f);
}
//a c a*d
//— / — = ——————
//b d b*c
Rational Rational::operator/(Rational x)
{
int a=numerator;
int b=denominator;
int c=x.numerator;
int d=x.denominator;
int e=a*d;
int f=b*c;
return Rational(e,f);
}
void Rational::print()
{
if(numerator%denominator==0)
cout<<numerator/denominator;
else
cout<<numerator<<'/'<<denominator;
}
int main()
{
Rational f1(2,16);
Rational f2(7,8);
Rational resadd=f1+f2;
f1.print();
cout<<'+';
f2.print();
cout<<'=';
resadd.print();
cout<<'\n';
Rational ressub=f1-f2;
f1.print();
cout<<'-';
f2.print();
cout<<'=';
ressub.print();
cout<<'\n';
Rational resmul=f1*f2;
f1.print();
cout<<'*';
f2.print();
cout<<'=';
resmul.print();
cout<<'\n';
Rational resc=f1/f2;
f1.print();
cout<<'/';
f2.print();
cout<<'=';
resc.print();
cout<<'\n';
return 0;
}