PTA-数据结构与算法-一元多项式的乘法与加法运算

一元多项式的乘法与加法运算

设计函数分别求两个一元多项式的乘积与和。
输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:

4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0

暴力法直接就过了。需要注意的是,本题给出的是多项式,也就说明指数不会是负数,否则就是分式不属于多项式(多项式属于整式),开两个数组分别记录这两个多项式,数组下标代表指数,值为系数,则加法就是对于的下标相加。积就是下标相加,值相乘。
——————————————
对于题目中说到的零多项式应输出0 0。这句话纠结了很久,起初以为系数为0的多项式就是0多项式的意思,那么这种情况只存在于加法中。。。。后来才知道这句话的意思是有无合适的输出。。。没有就输出0 0.。。。。渣阅读理解能力

代码如下:

#include
using namespace std;
int a[1010],b[1010],c[1010],d[2021];
int main()
{
  int n1,n2;
  cin>>n1;
  for(int i=0;iint coefficient,index;//系数和指数
    cin>>coefficient>>index;
    a[index]+=coefficient;
  }
  cin>>n2;
  for(int i=0;iint coefficient,index;
    cin>>coefficient>>index;
    b[index]+=coefficient;
  }
  for(int i=1000;i>=0;i--)//计算和
    if(a[i]||b[i]) c[i]+=a[i]+b[i];
  for(int i=1000;i>=0;i--)//计算积
  {
    if(a[i])
    {
      for(int j=1000;j>=0;j--)
      {
        if(b[j])
        {
          d[i+j]+=b[j]*a[i];
        }
      }
    }
  }
  bool flag1=true;//是否没有多项式
  for(int i=2020;i>=0;i--)
  {
    if(d[i])
    {
      if(flag1){cout<' '<false;}
      else cout<<' '<' '<if(flag1)cout<<0<<' '<<0;//零多项式
  cout<bool flag2=true;
  for(int i=1000;i>=0;i--)
  {
    if(c[i])
    {
      if(flag2){cout<' '<false;}
      else cout<<' '<' '<if(flag2)cout<<0<<' '<<0;
  cout<return 0;
}

听说是用链表做???

你可能感兴趣的:(基础操作)