|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <iostream>
#include <string>
#include <math.h>
class Complex
{
public:
Complex(); //构造器
Complex(int a,int b); //函数重载
virtual ~Complex();
Complex operator + (Complex &d); // +重载
Complex operator - (Complex &d); // -重载
Complex operator * (Complex &d); // *重载
Complex operator / (Complex &d); // /重载
Complex Simplify(Complex &temp); //分数化简
void Print();
private:
int num; //分子
int den; //分母
};
Complex::Complex()
{
num = 0;
den = 0;
std::cout << "Complex 构造器++\n";
}
Complex::Complex(int r,int i)
{
num = r;
den = i;
}
Complex::~Complex()
{
std::cout << "Complex 析构器--\n";
}
//打印
void Complex::Print()
{
if(num == 0 || den == 0)
std::cout <<"0\n";
else if(num == den)
std::cout <<"1\n";
else
std::cout << num << "/" << den << "\n";
}
//加法
Complex Complex::operator + (Complex &d)
{
Complex c;
if(d.den < 0)
{
d.num = -d.num;
d.den = -d.den;
}
c.num = num * d.den + d.num * den;
c.den = den * d.den;
return c;
}
//减法
Complex Complex::operator - (Complex &d)
{
Complex c;
if(d.den < 0)
{
d.num = -d.num;
d.den = -d.den;
}
c.num = num * d.den - d.num * den;
c.den = den * d.den;
return c;
}
//乘法
Complex Complex::operator * (Complex &d)
{
Complex c;
c.num = num * d.num;
c.den = den * d.den;
return c;
}
//除法
Complex Complex::operator / (Complex &d)
{
Complex c;
c.num = num * d.den;
c.den = den * d.num;
return c;
}
//分数化简
Complex Complex::Simplify(Complex &temp)
{
Complex result;
if(temp.den == 0 || temp.num == 0) //分子分母为0的情况
{
result.num = 0;
result.den = 0;
return result;
}
int c = abs(temp.num); //取绝对值
int d = abs(temp.den);
int x = c < d ? c : d; //c,d的最大的公约数永远不可能是较大的那个数,只可能是较小的数
for(x; x >= 1; x--)
{
if(c % x == 0 && d % x == 0) //x正好被c,d整除,则找到了x
{
break;
}
}
result.num = temp.num / x;
result.den = temp.den / x;
if(result.den < 0) //分母带负号处理
{
result.num = -result.num;
result.den = -result.den;
}
return result;
}
int main()
{
Complex a(1,2), b(0,4), c, d, e, f;
//计算
c = a + b;
d = a - b;
e = a * b;
f = a / b;
//化简
c = c.Simplify(c);
d = d.Simplify(d);
e = e.Simplify(e);
f = f.Simplify(f);
//打印
std::cout << "a:";
a.Print();
std::cout << "b:";
b.Print();
std::cout << "c:";
c.Print();
std::cout << "d:";
d.Print();
std::cout << "e:";
e.Print();
std::cout << "f:";
f.Print();
return 0;
} |
|