C++多项式相乘
只图成果 人气:0C++多项式相乘
#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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容