C++实现多项式相乘

 更新时间:2022年07月22日 15:13:11   作者:只图成果  
这篇文章主要介绍了C++实现多项式相乘方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

C++多项式相乘

在这里插入图片描述

 

在这里插入图片描述

在这里插入图片描述

#include <iostream>
using namespace std;
int a[2][2]; //二维数组开的秒
int b[2][2];
int ans[25]; //用来存放系数,那么存放后所对应的下标就是指数
int main(){
    for(int i=0;i<2;i++){
        for(int j=0;j<2;j++){
            cin >> a[i][j];
        }
    }
    for(int i=0;i<2;i++){
        for(int j=0;j<2;j++){
            cin >> b[i][j];
        }
    }
    for(int i=0;i<2;i++){
        for(int j=0;j<2;j++){
            ans[a[i][1] + b[j][1]] += a[i][0] * b[j][0];
            //幂次就是对应的下标
        } //累加的原因是,因为是两个相加的式子相乘,所以要合并幂次相同的项
    }
    for(int i = 20;i>=0;i--){
        if(ans[i] != 0){
            cout << ans[i] << " " << i << endl;
        }
    }
    return 0;
}

C++多项式的乘法和加法

多项式的乘法和加法

采用动态数组的方法

该方法较链式方法略微复杂

#include<iostream>
   using namespace std;
   //多项式的乘法和加法
   struct node{
    int coef;
    int exp;
   };
   
    //****排序****
 void  nodesort(node* pn,const int& count)
 {   if(count<=1) return;
  else{
  bool flag =false;
  for(int i=0;i<count-1&&!flag;++i){
   flag = true;
    for(int j=1;j<count-i;++j){
     node t;
   if(pn[j-1].exp<pn[j].exp) {
    t = pn[j];
    pn[j] = pn[j-1];
    pn[j-1] = t;
    flag = false;
   } 
    }
  } 
  }
 }
 
 //****输出**** 
   void print( node *s,const int& n)
   {   
   cout<<"*********output*********\n";
    for(int i=0;i<n;++i)
    {   if(i!=n-1)
     cout<*<s[i].coef<<"x^"<<s[i].exp<<" + ";
     else cout<<s[i].coef<<"x^"<<s[i].exp<<endl;
    }
    cout<<endl; 
 }
//****合并同类项****
 int nodemerge(node* s,const int& n ,const int& key=0){
  if(n<1) {cerr<<"数组大小有误\n";}
  if(n==1)return 1;
  if(n>1 && key==0){//排序并且合并 
   nodesort(s,n); 
   int count=0;
  for(int i=1;i<n;++i)
  {
   if(s[count].exp==s[i].exp){
    s[count].coef = s[count].coef + s[i].coef ;
    
   }
   else{
    s[++count] = s[i];
   }
  }
  return count+1; 
  }
  
  if(n>1&&key==1){//仅合并 
   //nodesort(s,n); 
   int count=0;
  for(int i=1;i<n;++i)
  {
   if(s[count].exp==s[i].exp){
    s[count].coef = s[count].coef + s[i].coef ;
    
   }
   else{
    s[++count] = s[i];
   }
  }
  return count+1; 
  }
 }   

//***计算多项式加法*** 
   void add(node* s,const int& m,node* a,const int& n)
       {
     node* newnode = new node[m+n];
     int i=0,j=0,temp=0;
     
     while(i<m && j<n){
      if(s[i].exp>a[j].exp){
       newnode[temp].coef = s[i].coef;
       newnode[temp].exp = s[i].exp;
       temp++;
       i++;
       
      }
      
    else if(s[i].exp<a[j].exp){
       newnode[temp].coef = a[j].coef;
       newnode[temp].exp = a[j].exp;
       temp++;
       j++;
       
      }
    else {
       newnode[temp].coef = a[j].coef+s[i].coef;
       newnode[temp].exp = a[j].exp;
       temp++;
       i++;
       j++;
      }
     }
    while(i<m)
    {
    newnode[temp].coef = s[i].coef;
      newnode[temp].exp = s[i].exp;
       temp++;
       i++; 
    }
  while(j<n)
    {
     newnode[temp].coef = a[j].coef;
       newnode[temp].exp = a[j].exp;
       temp++;
       j++;
    }
    
            temp = nodemerge(newnode,temp,1);
            cout<<"多项式加法\n";
     print(newnode,temp);
     delete[] newnode;
     return ;
     
 }

//***计算多项式乘法*** 
   void   multi(node* s,const int& m,node* a,const int& n)
 {
    node* pn = new node[m*n];
    int count = 0;
    for(int i=0;i<m;++i)
    {
     for(int j=0;j<n;++j){
      pn[count].coef = (s[i].coef) * (a[j].coef) ;
      pn[count].exp = s[i].exp + a[j].exp;
      count++;
     }
    }
  //***排序并且合并***
      count = nodemerge(pn,count,0);
      cout<<"多项式乘法\n";
      print(pn,count);
     delete[] pn;
     return ;
 }
 //****输入数据*****
 node* node_input(const int& n)
 {  
  node* seq = new node[n]; 
  for(int i=0;i<2*n;++i)
    { 
    
     if(i%2==0) cin>>seq[i/2].coef;
     else cin>>seq[i/2].exp;
   } 
   return seq;
 }  
  
    //***销毁****
 void delete_node(node*s){
  delete[] s;
 } 


//**测试**
 int main(){
    //m,n表示输入的节点个数
  //示例:3x^6+4x^4+x 输入的个数为3,每个节点分别为:3 6; 4 4; *1 *1 
    int m,n;
    int temp;
    node* seq1,*seq2;
    
    cout<<"input m value:";
       cin>>m;
       seq1 = node_input(m); 
       
       cout<<"input n value:";
       cin>>n;
       seq2 = node_input(n); 
     
      //***排序并且合并*** 
      m=nodemerge(seq1,m);
      n =nodemerge(seq2,n);
     
     //test
     print(seq1,m);
     print(seq2,n);
     multi(seq1,m,seq2,n);
     add(seq1,m,seq2,n);
     
     //delete
     delete_node(seq1);
     delete_node(seq2);
    return 0;
   }

样例测试输出

input m value:3
1 2
1 3
2 4
input n value:4
3 5
3 76
3 4
2 5
*********output*********
2x^4 + 1x^3 + 1x^2

*********output*********
3x^76 + 5x^5 + 3x^4

多项式乘法
*********output*********
6x^80 + 3x^79 + 3x^78 + 10x^9 + 11x^8 + 8x^7 + 3x^6

多项式加法
*********output*********
3x^76 + 5x^5 + 5x^4 + 1x^3 + 1x^2

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C/C++指针和取地址的方法

    C/C++指针和取地址的方法

    C/C++指针和取地址的方法,需要的朋友可以参考一下
    2013-04-04
  • c++ KMP字符串匹配算法

    c++ KMP字符串匹配算法

    大家好,本篇文章主要讲的是c++ KMP字符串匹配算法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++ opencv霍夫圆检测使用案例详解

    C++ opencv霍夫圆检测使用案例详解

    这篇文章主要介绍了C++ opencv霍夫圆检测使用案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C++虚函数表实例分析

    C++虚函数表实例分析

    这篇文章主要介绍了C++虚函数表,对多态中用到的虚函数表进行了比较通俗的实例分析,需要的朋友可以参考下
    2014-09-09
  • C++ Opengl旋转功能附源码下载

    C++ Opengl旋转功能附源码下载

    这篇文章主要介绍了C++ Opengl旋转功能附源码下载,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • C++中vector的模拟实现实例详解

    C++中vector的模拟实现实例详解

    vector是表示可变大小数组的序列容器,它也采用连续存储空间来存储元素,因此可以采用下标对vector的元素进行访问,这篇文章主要给大家介绍了关于C++中vector模拟实现的相关资料,需要的朋友可以参考下
    2021-11-11
  • 浅析VSCode launch.json中的各种替换变量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等

    浅析VSCode launch.json中的各种替换变量的意思 ${workspaceFolder} ${file} $

    这篇文章主要介绍了VSCode launch.json中的各种替换变量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Matlab绘制有趣的罗盘时钟的示例代码

    Matlab绘制有趣的罗盘时钟的示例代码

    这篇文章主要介绍了如何利用Matlab实现绘制有趣的罗盘时钟,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,需要的可以参考一下
    2023-01-01
  • c/c++获取系统时间函数的方法示例

    c/c++获取系统时间函数的方法示例

    这篇文章主要介绍了c/c++获取系统时间函数的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C语言指针笔试题全面解析

    C语言指针笔试题全面解析

    这篇文章主要介绍了C语言指针笔试题全面解析,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下。
    2021-09-09

最新评论