运算符重载-复数的加法

来源:互联网 发布:钓鱼王vb强食剂 编辑:程序博客网 时间:2024/05/17 04:20
#include<iostream>#include<cstdio>#include<string>#include<cmath>#include<cstring>#include<cstdlib>using namespace std;class Complex {public:     Complex (int r=0, int i=0) : m_r (r), m_i (i) {}     const Complex operator+ (const Complex& c) const      {        return Complex (m_r + c.m_r, m_i + c.m_i);     }    void print (void) const     {        if(m_i == 0)            cout << m_r;        else if(m_i == 1 && m_r == 0)            cout << 'i';        else if(m_i == -1 && m_r == 0)            cout<< '-' << 'i';        else if(m_r != 0 && m_i == 1)            cout << m_r << '+' << 'i';        else if(m_r != 0 && m_i == -1)            cout << m_r << '-' << 'i';        else if(m_r != 0 && m_i > 1)            cout << m_r << '+' << m_i << 'i';    } private: int m_r; // 实部 int m_i; // 虚部};void fun(string s,int &r,int &i){    int j;    r = i = 0;    char buf[256];    int len = s.length();    int signPos = -1,    // +/-号位置        iPos = -1;        // 结尾的i的位置    for (j = len-1; j >-1; j--)    {        if ('i' == s[j])            iPos = j;        else if ('+' == s[j] || '-' == s[j])        {            signPos = j;            break;        }    }    if (0 == iPos)   // 纯虚数i    {        r = 0;        i = 1;    }     else if (0 < iPos)   // 复数    {        // 实部        if (0 < signPos)        {            for(j = 0;j < signPos;++j)            {                r = r*10 + s[j] - '0';              }        }        // 虚部        if (signPos + 1 == iPos)   // 虚数部分 = -i / +i            i = '+' == s[signPos] ? 1 : -1;        else        {            for(j = signPos+1;j < len-1;++j)            {                i = i*10 + s[j] - '0';              }        }          }    else // 纯实数    {       for(j = 0;j < len;++j)       {            r = r*10 + s[j] - '0';         }    }  /*  for(j = 0;j < len;++j)    {        if(s[j] == '+')            break;        r = r*10 + s[j] - '0';      }    for(++j;j < len;++j)    {        if(s[j] == 'i')        {            if(i == 0)                i = 1;            break;        }           i = i*10 + s[j] - '0';      }*/}int main () {    int r,i;    string s;    cin >> s;    fun(s,r,i);    Complex t(r,i);    while(true)    {        cin >> s;        if(s == "0")            break;        fun(s,r,i);        Complex c1(r,i);        t = t+c1;    }    t.print();    return 0;} 
0 0
原创粉丝点击