设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
输入样例:
4 3 4 -5 2 6 1 -2 03 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 15 20 -4 4 -5 2 9 1 -2 0
解析:用数组下标表示多项式的指数,数组中的数值为它的系数。
#include<iostream>#define N 10000using namespace std;int a[N];//存放第一个单项式 int b[N];//存放第二个单项式 int c[N];//存放乘的结果 int d[N];//存放加的结果 int main(){int len1,len2,t1,t2;cin>>len1;for(int i=0;i<len1;i++){cin>>t1>>t2;a[t2]+=t1;}cin>>len2;for(int i=0;i<len2;i++){cin>>t1>>t2;b[t2]+=t1;}for(int i=N-1;i>=0;i--)if(a[i]){for(int j=N-1;j>=0;j--)if(b[j]){c[i+j]+=a[i]*b[j];}}int count=0;for(int i=N-1;i>=0;i--){if(c[i]){if(count)cout<<" ";if(c[i])cout<<c[i]<<" "<<i;count++;}}if(!count)cout<<"0 0";cout<<endl;count=0;for(int i=N-1;i>=0;i--){if(a[i])d[i]+=a[i];if(b[i])d[i]+=b[i];}for(int i=N-1;i>=0;i--){if(d[i]){if(count)cout<<" ";cout<<d[i]<<" "<<i;count++;}}if(!count)cout<<"0 0";}