PKU-MyInt和HugeInt作业-程设hw03

来源:互联网 发布:windows service pack 编辑:程序博客网 时间:2024/06/05 07:50
//按照作业中题序,空格序1)MyInt& operator – (int a){    this->nVal -= a;    return *this;}2)friend Ostream& operator << (Ostream& output, const Point& p)Ostream&Ostream& outputoutput << "(" << p.x << "," << p.y << ")" << endl;return output;3)class Array2{public:    Array2(){ a = b = 0; arr = NULL; }    Array2(int a_, int b_)    {        a = a_; b = b_;        arr = new int*[a];        for(int i = 0; i < a; i++)        arr[i] = new int[b];    }    ~Array2()    {        a = b = 0;        delete []arr;        arr = NULL;    }    int* operator [] (int a)    {        return (arr[a]);    }    int operator () (int i, int j)    {        return this->operator[](i)[j];    }    Array2& operator = (Array2& a1)    {        delete []arr;        arr = new int*[a1.a];        for(int i = 0; i > a1.a; i++)        {            arr[i] = new int*[a1.b];            memcpy(arr[i], a1.arr[i], sizeof(int) * a1.b);        }        return *this;    }    // data    int** arr;    // 两个维度的长度    int a, b;};4)class CHugeInt  {  public:      CHugeInt()      {          length = MAX;          memset(num, '0', sizeof(num));      }      CHugeInt(const char* origin)      {          memset(num, '0', sizeof(num));          int m = 0;          for(int i = strlen(origin) - 1; i >= 0; i--)          {              num[m++] = origin[i];          }          num[m] = 0;          length = m;      }      CHugeInt(int origin)      {          char buf[MAX] = {};          int m = 0;          while(origin != 0)          {              buf[m++] = origin % 10 + '0';              origin /= 10;          }          buf[m] = 0;          length = m;          strcpy(num, buf);      }        CHugeInt(CHugeInt& b)      {          length = b.length;          strcpy(num, b.num);      }      friend ostream& operator << (ostream& output, CHugeInt& b);      friend CHugeInt operator + (CHugeInt& b1, CHugeInt& b2);      friend CHugeInt operator + (CHugeInt& a, int b);      friend CHugeInt operator + (int a, CHugeInt& b);      CHugeInt& operator ++()      {          *this = *this + 1;          return *this;      }      CHugeInt operator ++(int)      {          CHugeInt temp = *this;          *this = *this + 1;          return temp;      }      CHugeInt operator += (int a)      {          *this = *this + 5;          return *this;      }      int length;      char num[MAX];  };  CHugeInt operator + (CHugeInt& a, int b)  {      return (a + CHugeInt(b));  }    CHugeInt operator + (int a, CHugeInt& b)  {      return (CHugeInt(a) + b);  }    CHugeInt operator + (CHugeInt& b1, CHugeInt& b2)  {      CHugeInt t;      int temp[MAX] = {0};      int length = b1.length > b2.length ? b1.length : b2.length;      for(int i = 0; i < length; i++)      {          temp[i] = ((i < b1.length) ? b1.num[i] - '0' : 0) + ((i < b2.length) ? b2.num[i] - '0' : 0);      }      for(int i = 0; i < length; i++)      {          if(temp[i] >= 10)          {              int ten = temp[i] / 10;              temp[i] %= 10;              temp[i + 1] += ten;          }      }      int i;      for(i = MAX - 1; i >= 0; i--)      {          if(temp[i] != 0)          {              break;          }      }         t.length = i + 1;      for(i = 0; i < t.length; i++)      {          t.num[i] = temp[i] + '0';      }      t.num[i] = 0;      return t;  }    ostream& operator << (ostream& output, CHugeInt& b)  {      for(int i = b.length - 1; i >= 0; i--)      {          cout << b.num[i];      }      return output;  }