OJ多项式加法

Posted victorique-de-blois

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OJ多项式加法相关的知识,希望对你有一定的参考价值。

复习了一下STL,写完才想起来可以用map,代码量*3,orz

提交时遇到一次Presentation Error,OJ的空格输出实在是太随性。

思路是分别对两组输入进行排序,再通过k1,k2两个迭代器导入新的容器

注意:

  1. 容器为空时,begin()与end()返回相同
  2. 容器为空与容器不为空时,begin()返回不一致
  3. 需要进行操作的多项式中,存在0(即输入仅包含一个系数和一个负项数,如:9 -7)和多组相同幂数的情况(12 7 -7 5 3 17 23 4 15 10 -10 5 13 5 2 19 9 -7)
技术图片
    vector<int> a, b;
    vector<int>::const_iterator k1, k2;
    if (a.begin() == a.end())    //输出1
        cout << 1;
    else
        cout << 0;
    if (a.begin() == b.begin())    //输出1
        cout << 1;
    else
        cout << 0;
    k1 = a.begin();
    a.push_back(5);
    k2 = a.begin();
    if (k1 == k2)    //输出0
        cout << 1;
    else
        cout << 0;
View Code
  1 #include <iostream>
  2 #include <algorithm>
  3 #include <vector>
  4 using namespace std;
  5 class poly    //多项式类 
  6 public:
  7     int coe;    //系数 
  8     int item;    //项数 
  9     poly()
 10     poly(int a, int b): coe(a), item(b)
 11     friend bool operator < (const poly &, const poly &);
 12     friend poly operator + (const poly &, const poly &);    
 13 ;
 14 bool operator < (const poly &a, const poly &b)
 15     if (a.item > b.item)
 16         return true;
 17     else
 18         return false;
 19 
 20 poly operator + (const poly &a, const poly &b)
 21     return poly(a.coe + b.coe, a.item);
 22 
 23 void insert_num(vector<poly> &x)
 24     poly tmp;
 25     int a, b;
 26     while (cin >> a >> b)
 27         if (b < 0)
 28                 break;
 29         tmp.coe = a;
 30         tmp.item = b;
 31         x.push_back(tmp);
 32     
 33 
 34 int main()
 35     int n;
 36     vector<poly> p1, p2, p3;
 37     vector<poly>::iterator k1, k2, k3;
 38     cin >> n;
 39     for (int i = 0; i < n; ++i)
 40         insert_num(p1);
 41         insert_num(p2);
 42         sort(p1.begin(), p1.end());
 43         sort(p2.begin(), p2.end());
 44         k1 = p1.begin();
 45         k2 = p2.begin();
 46         while (1)
 47             k3 = p3.end() - 1;    //请勿使用p3.rbegin(),对应reverse_iterator 
 48             if (k1 < p1.end() && k2 < p2.end())
 49                 if ((*k1).item < (*k2).item)
 50                     if (!p3.empty() && (*k3).item == (*k2).item)
 51                         (*k3) = (*k3) + (*k2);
 52                     else
 53                         p3.push_back(*k2);
 54                     k2++;
 55                 
 56                 else if ((*k1).item > (*k2).item)
 57                     if (!p3.empty() && (*k3).item == (*k1).item)
 58                         (*k3) = (*k3) + (*k1);
 59                     else
 60                         p3.push_back(*k1);
 61                     k1++;
 62                 
 63                 else
 64                     if (!p3.empty() && (*k3).item == (*k2).item)
 65                         (*k3) = (*k3) + (*k2) + (*k1);
 66                     else
 67                         p3.push_back((*k1) + (*k2));
 68                     k1++;
 69                     k2++;
 70                                 
 71             
 72             else if (k1 < p1.end() && k2 == p2.end())
 73                 while (k1 < p1.end())
 74                     k3 = p3.end() - 1;
 75                     if (!p3.empty() && (*k3).item == (*k1).item)
 76                         (*k3) = (*k3) + (*k1);
 77                     else
 78                         p3.push_back(*k1);
 79                     k1++;
 80                 
 81             
 82             else if (k1 == p1.end() && k2 < p2.end())
 83                 while (k2 < p2.end())
 84                     k3 = p3.end() - 1;
 85                     if (!p3.empty() && (*k3).item == (*k2).item)
 86                         (*k3) = (*k3) + (*k2);
 87                     else
 88                         p3.push_back(*k2);
 89                     k2++;
 90                 
 91             
 92             else
 93                 break;
 94         
 95         for (k3 = p3.begin(); k3 < p3.end(); k3++)
 96             if ((*k3).coe != 0)
 97                 cout << "[ " << (*k3).coe <<   << (*k3).item << " ] ";
 98         
 99         cout << endl;
100         p1.clear();
101         p2.clear();
102         p3.clear();
103     
104     return 0;
105 

 

以上是关于OJ多项式加法的主要内容,如果未能解决你的问题,请参考以下文章

一元多项式的乘法和加法

多项式加法

链表实现多项式加法

[PAT] 一元多项式的乘法与加法运算 C语言实现

7-22 一元多项式的乘法与加法运算 (20 分)

02-线性结构2 一元多项式的乘法与加法运算