C语言如何实现多项式相乘的算法?

2026-04-12 09:041阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计1195个文字,预计阅读时间需要5分钟。

C语言如何实现多项式相乘的算法?

目录+C++多项式相乘+C++多项式的乘法和加法+C++多项式的乘法+C++多项式的加法+C++多项式相乘+

目录
  • 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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

本文共计1195个文字,预计阅读时间需要5分钟。

C语言如何实现多项式相乘的算法?

目录+C++多项式相乘+C++多项式的乘法和加法+C++多项式的乘法+C++多项式的加法+C++多项式相乘+

目录
  • 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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。