设计函数求一元多项式的导数。(注:x(n为整数)的一阶导数为_n_x。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
代码
因为指数的递减的,所以不可能出现两个指数一样的输入。
这样,我们可以用一个一维数组来存放指数和系数。数组下标放指数,数组对应的值就放系数。
题目给出多项式为:f(x) = 3x - 5x + 6x -2, 则求导之后g(x) = 12x - 10x + 6。
求导的时候由低次到高次(不能反过来),通过求导公式修改数组里的元素,同时计数不为零的导数项的个数。
#include<cstdio>
int main() {
int array[1010] = {0};
int coef = 0, exp = 0, count = 0;
while(scanf("%d%d", &coef, &exp) != EOF) {
array[exp] = coef;
}
array[0] = 0; /* 零次项求导之后直接为0(常数的导数为0) */
for(int i = 1; i <= 1000; i++) {
array[i - 1] = array[i] * i; /* 求导公式 */
array[i] = 0; /* 求完导后,当前项系数清零,否则后面可能无法覆盖 */
if(array[i - 1] != 0)
count++;
}
if(count == 0) {
printf("0 0");
}
else {
for(int i = 1000; i >= 0; i--) { /* 指数从高到低输出 */
if(array[i] != 0) {
printf("%d %d", array[i], i);
count--; /* 处理空格的操作 */
if(count != 0) {
printf(" ");
}
}
}
}
return 0;
}