设计函数分别求两个一元多项式的乘积与和。 输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出 |
输入样例:
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
考察 : 运算 |
注意 : 数组开够大,指数存在负数(但该题好像没考虑) |
思路 : 数组存储 |
C
#include<stdio.h>
void print(long result[]); // 打印结果函数
struct Num{
int n1,n2; // 系数,指数
}a[10010]; // 储存第一行的数据,第二行的数据读入时可以直接开始运算,不需要再存
int main(void){
long result1[10001]={0},result2[10001]={0}; // 1.储存相乘 2.储存相加 ; 指数为数组下标
int len1,len2,num1,num2;
// 第一行数据读入
scanf("%d",&len1);
for(int z=0;z<len1;z++) {
scanf("%d %d",&a[z].n1,&a[z].n2);
result2[a[z].n2+2000] = a[z].n1; // 相加运算,全部加2000是因为考虑了负数的情况
}
// 第二行数据读入
scanf("%d",&len2);
while (len2--){
scanf("%d %d",&num1,&num2);
result2[num2+2000] += num1; // 相加运算
for(int z=0;z<len1;z++) result1[num2+a[z].n2+2000] += num1*a[z].n1; // 相乘运算
}
// 答案输出
print(result1);
print(result2);
return 0;
}
void print(long result[]){
int flag = 0; // 判断是否有输出
for(int z=4001;z>=0;z--) {
if(result[z]!=0)
{
if(flag>0) putchar(' ');
printf("%d %d",result[z],z-2000);
flag = 1;
}
}
if(flag==0) printf("0 0");
putchar('\n');
}