7-2 一元多项式的乘法与加法运算
https://pintia.cn/problem-sets/15/problems/710
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 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 1 5 20 -4 4 -5 2 9 1 -2 0
提交代码
#include <stdio.h> #define MAXN 10000001 int in1[1001] = {0}; //第一行输入系数(下标为指数) int in2[1001] = {0}; //第二行输入系数(下标为指数) int ans1[2001] = {0}; //乘积多项式系数(下标为指数) int ans2[1001] = {0}; //和多项式系数(下标为指数) void disAns(int arr[], int maxLen) { bool isFirst = true; for(int i=maxLen; i>=0; i--) { if(arr[i]!=0) { if(isFirst) { isFirst = false; printf("%d %d",arr[i],i); } else { printf(" %d %d",arr[i],i); } } } if(isFirst)//零多项式 { printf("0 0"); } printf("\n"); } int main() { int n,a,b; int in1max = -2147483648, in2max = -2147483648; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d %d",&a,&b);//系数 指数 in1max = b > in1max ? b : in1max; in1[b] = a; ans2[b] += a; } scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d %d",&a,&b);//系数 指数 in2max = b > in2max ? b : in2max; in2[b] = a; ans2[b] += a; } //----------------------------------------- for(int i=0;i<=in1max;i++) { if(in1[i]==0) continue; for(int j=0;j<=in2max;j++) { if(in2[j]==0) continue; int index = i+j; int num = in1[i] * in2[j]; ans1[index] += num; } } disAns(ans1, in1max+in2max); disAns(ans2, in1max>in2max?in1max:in2max); return 0; }