歡迎您光臨本站 註冊首頁

C++單鏈表實現大數加法

←手機掃碼閱讀     月球人 @ 2020-06-05 , reply:0

本文實例為大家分享了C++單鏈表實現大數加法,供大家參考,具體內容如下

Input Format

輸入文件包括兩行。

  • 第一行包括一個正整數,保證位數不超過1000000。

  • 第二行包括一個正整數,保證位數不超過1000000。

Output Format

輸出文件包括一行。

  • 第一行包括一個正整數。

Sample Input

10558
 22
 

Sample Output

10580

  #include <iostream>    using namespace std;    class BigData {    friend ostream &operator<<(ostream &os, const BigData &x);      friend istream &operator>>(istream &is, BigData &x);      friend BigData operator+(BigData a, BigData b);    private:    struct node {      int data;      node *next;        node(const short &x, node *n = NULL) {        data = x;        next = n;      }    };      node *num;      void clear();    public:    BigData(node *p = NULL) {      if (p == NULL) {        num = new node(0);      } else {        num = p;      };    }      BigData(const BigData &);      ~BigData() {      clear();    }      BigData &operator=(const BigData &);  };    BigData::BigData(const BigData &x) {    num = new node(x.num->data);    node *p = num, *q = x.num;    while (q->next != NULL) {      q = q->next;      p->next = new node(q->data);      p = p->next;    }  }    void BigData::clear() {    node *p = num, *q;    while (p != NULL) {      q = p;      p = p->next;      delete q;    }    num = NULL;  }    BigData operator+(BigData a, BigData b) {    BigData tmp;    BigData::node *p, *q, *end;    int carry;    tmp.num = end = new BigData::node(a.num->data + b.num->data);    carry = tmp.num->data / 10;    tmp.num->data %= 10;    p = a.num->next;    q = b.num->next;    end = tmp.num;    while (p != NULL && q != NULL) {      end->next = new BigData::node(p->data + q->data + carry);      end = end->next;      carry = end->data / 10;      end->data %= 10;      p = p->next;      q = q->next;    }    if (p == NULL)p = q;    while (p != NULL) {      end->next = new BigData::node(p->data + carry);      end = end->next;      carry = end->data / 10;      end->data %= 10;      p = p->next;    }    if (carry != 0) {      end->next = new BigData::node(carry);      return tmp;    }  }    BigData &BigData::operator=(const BigData &x) {    if (&x == this)return *this;    clear();    num = new node(x.num->data);    node *p = num, *q = x.num;    while (q->next != NULL) {      q = q->next;      p->next = new node(q->data);      p = p->next;    }    return *this;  }    istream &operator>>(istream &is, BigData &x) {    char ch;    x.clear();    while ((ch = is.get()) != &#x27; &#x27;) {      x.num = new BigData::node(ch - &#x27;0&#x27;, x.num);    }    return is;  }    ostream &operator<<(ostream &os, const BigData &x) {    string s;    BigData::node *p = x.num;    while (p != NULL) {      s = char(p->data + &#x27;0&#x27;) + s;      p = p->next;    }    for (int i = 0; i < s.size(); ++i)os << s[i];    return os;  }    int main() {    BigData a, b, c;    cin >> a >> b;    c = a + b;    cout << c;  }



[月球人 ] C++單鏈表實現大數加法已經有264次圍觀

http://coctec.com/docs/c/language/show-post-237033.html