题目
输入
- 两个多项式,两行输入
- 格式
非零项个数 K 幂次N1 对应项系数an1 … - 整数k∈[1,10] 幂次N∈[0,1000]
输出
- 非零项个数以及按幂次降序输出各非零项系数
例子
- 输入
2 1 2.4 0 3.2
2 2 1.5 1 0.5 - 输出
3 3 3.6 2 6.0 1 1.6
思路
自己想的很乱,直接看的《上机训练实战指南》的思路,然后写的答案。
- 先得到第一个多项式的系数,然后在输入第二个系数时循环与第一个多项式的系数相乘,并将结果加到对应指数的系数上,输出非零项。
#include<stdio.h>
typedef struct term {
int ex; //幂次
double cof; //系数
}Poly;
int main()
{
int i, j, count, K1, K2; //两个多项式的非零项个数
Poly product[1000+1]; //第一个多项式的输入
double result[2001] = {0.0};
int expn; //第二个多项式的输入
double coe;
//多项式1输入
scanf("%d", &K1);
for (i=0; i < K1; i++) {
scanf("%d %lf", &product[i].ex, &product[i].cof);
}
//多项式2输入
scanf("%d", &K2);
for (i=0; i < K2; i++) {
scanf("%d %lf", &expn, &coe);
for (j=0; j < K1; j++) {
result[expn + product[j].ex] += coe * product[j].cof;
}
}
//统计非零项个数
count = 0;
for (i=0; i <= 2000; i++)
if (result[i] != 0.0)
count++;
printf("%d", count);
for (i=2000; i >= 0; i--)
if (result[i] != 0.0)
printf(" %d %.1f", i, result[i]);
return 0;
}
遇到的错误
- 编译不通过,No Such File不知道为什么
- double为%lf(之前遇到过)
- 幂次最高为1000,所以乘之后最高为2000,数组开到2001
- 注意格式,刚开始把coe定义为int型,出现segmentation fault