7-2 一元多项式的乘法与加法运算
Posted cbattle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于7-2 一元多项式的乘法与加法运算的主要内容,如果未能解决你的问题,请参考以下文章