C++实现多项式相乘

目录

C++多项式相乘

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    C++超详细讲解模板的使用

    C&#43;&#43;超详细讲解模板的使用目录一、函数模板1.1函数模板概念1.2 函数模板格式1.3 函数模板的原理1.4 函数模板的实例化二、类模板

    C++学习之多态的使用详解

    C&#43;&#43;学习之多态的使用详解目录前言多态向上转型向下转型作用域前言
    最近为了完成数据库系统的实验,又复习起了《C&#43;&#43; Prim

    c++实现md5加密的代码

    c&#43;&#43;实现md5加密的代码最近发现md5加密算法挺有趣,特点是单向加密不可逆,加密后的字符串长度相等,于是就用C&#43;&#43;尝试实现了一

    C++实现优先队列的示例详解

    C&#43;&#43;实现优先队列的示例详解目录前言堆的存储方式维护堆的方法1、上浮操作2、下沉操作附上代码前言
    首先,啊,先简单介绍一下优先队

    C++实现简易通讯录功能

    C&#43;&#43;实现简易通讯录功能目录实现功能一、定义通讯录和通讯录人员结构体二、实现通讯录输入菜单1.定义菜单函数:2.主函数循环体中

    C++实现通讯录系统项目实战

    C&#43;&#43;实现通讯录系统项目实战本文实例为大家分享了C&#43;&#43;实现通讯录系统项目的具体代码,供大家参考,具体内容如下
    制作一个具

    C++实现通讯录小功能

    C&#43;&#43;实现通讯录小功能本文实例为大家分享了C&#43;&#43;实现通讯录功能的具体代码,供大家参考,具体内容如下
    思路:
    1.显示菜单栏
    voi

    C++实现简易通讯录管理系统

    C&#43;&#43;实现简易通讯录管理系统目录前言结构体联系人结构体通讯录结构体函数模块菜单添加联系人显示联系人判断联系人删除联系人查

    C++实现通讯录管理系统项目

    C&#43;&#43;实现通讯录管理系统项目本文实例为大家分享了C&#43;&#43;实现通讯录管理系统的具体代码,供大家参考,具体内容如下
    1、通讯录设