PAT 甲级 1009 Product of Polynomials 多项式乘法

在这里插入图片描述

思路:

PAT 甲级 1002 多项式加法
可以先参考多项式加法。乘法的思路和加法基本一样。我们先找出两个多项式的最高指数项的指数max1、max2和最小指数项的指数min1、min2,相乘后得到的多项式的最高指数项的指数一定是max1+max2,最小指数项的指数一定是min1+min2。遍历这个指数范围,输出最后的结果即可。

代码如下:c

#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;

int a1[15],a2[15];
double b1[15],b2[15];
double xishu[2005];//最终结果的系数
int visit[2005];//访问数组

int main(){
  int k1,k2;//k1为第一个多项式的k,k2为第二个多项式的k
  cin>>k1;
  int max1,min1;//max1为两个多项式中的最大项指数
                //min1为两个多项式中的最小项指数
  for(int i=0;i<k1;i++){//读入第一个数的指数和系数
    cin>>a1[i]>>b1[i];
  }

  max1=a1[0];//a1[0]肯定为第一个多项式的指数最大项
  min1=a1[k1-1];//a1[k1-1]肯定为第一个多项式的指数最小项

  cin>>k2;
  for(int i=0;i<k2;i++){//读入第二个多项式1
    cin>>a2[i]>>b2[i];
  }

  max1=a2[0]+max1;
  min1=a2[k2-1]+min1;//求出两个多项式的指数最大项和最小项

  for(int i=0;i<2005;i++){//初始化xishu[]和visit[]
    xishu[i]=0;
    visit[i]=0;
  }

  for(int i=0;i<k1;i++){//合并两个多项式指数相同的项,将合并后的系数存入xishu数组
    for(int j=0;j<k2;j++){
            xishu[a1[i]+a2[j]]+=b1[i]*b2[j];
            visit[a1[i]+a2[j]]=1;//标记该指数已访问
    }
  }



  int cnt=0;//cnt为合并后的所有非0系数项有多少个
  for(int i=min1;i<=max1;i++){
    if(visit[i]==1&&xishu[i]!=0){
        cnt++;
    }
  }

  if(cnt==0){//若两个多项式相加等于0,直接返回0
    cout<<0;
    return 0;
  }

  cout<<cnt<<' ';
  for(int i=max1;i>=min1;i--){
    if(i!=min1&&visit[i]==1){//若不为最后一项
      if(xishu[i]==0){//若系数为0,直接跳过
        continue;
      }
      cout<<i<<' ';

      int flag=true;//这里就是非常坑的点,因为若
                    //某一项的后面所有项都为0
                    //这一项后面就不能输出空格
                    //所以要用一个flag来判断
      for(int j=i-1;j>=0;j--){
        if(xishu[j]!=0){
            flag=false;
            break;
        }
      }
      if(flag){//某一项的后面项全为0
        cout<<fixed<<setprecision(1)<<xishu[i];
        return 0;
      }else{
        cout<<fixed<<setprecision(1)<<xishu[i]<<' ';
      }
    }else if(i==min1&&visit[i]==1){//若是最后一项
      if(xishu[i]==0){
        continue;
      }
      cout<<i<<' ';
      cout<<fixed<<setprecision(1)<<xishu[i];
    }
  }
  return 0;

}

猜你喜欢

转载自blog.csdn.net/weixin_44123362/article/details/89397693
今日推荐