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;
#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++;
else if(s[i].exp<a[j].exp){
newnode[temp].coef = a[j].coef;
newnode[temp].exp = a[j].exp;
temp++;
else {
newnode[temp].coef = a[j].coef+s[i].coef;
newnode[temp].exp = a[j].exp;
temp++;
while(i<m)
newnode[temp].coef = s[i].coef;
newnode[temp].exp = s[i].exp;
temp++;
while(j<n)
newnode[temp].coef = a[j].coef;
newnode[temp].exp = a[j].exp;
temp++;
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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
电脑版 - 返回首页
2006-2023 脚本之家 JB51.Net , All Rights Reserved.
苏ICP备14036222号