设计函数求一元多项式的导数。(注:xn为整数)的一阶导数为_n_x。)

输入格式:

以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。

输出格式:

以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0

输入样例:

  1. 3 4 -5 2 6 1 -2 0

输出样例:

  1. 12 3 -10 1 6 0

代码

因为指数的递减的,所以不可能出现两个指数一样的输入。

这样,我们可以用一个一维数组来存放指数系数。数组下标放指数,数组对应的值就放系数。

题目给出多项式为:f(x) = 3x - 5x + 6x -2, 则求导之后g(x) = 12x - 10x + 6。

求导的时候由低次到高次(不能反过来),通过求导公式修改数组里的元素,同时计数不为零的导数项的个数。

  1. #include<cstdio>
  2. int main() {
  3. int array[1010] = {0};
  4. int coef = 0, exp = 0, count = 0;
  5. while(scanf("%d%d", &coef, &exp) != EOF) {
  6. array[exp] = coef;
  7. }
  8. array[0] = 0; /* 零次项求导之后直接为0(常数的导数为0) */
  9. for(int i = 1; i <= 1000; i++) {
  10. array[i - 1] = array[i] * i; /* 求导公式 */
  11. array[i] = 0; /* 求完导后,当前项系数清零,否则后面可能无法覆盖 */
  12. if(array[i - 1] != 0)
  13. count++;
  14. }
  15. if(count == 0) {
  16. printf("0 0");
  17. }
  18. else {
  19. for(int i = 1000; i >= 0; i--) { /* 指数从高到低输出 */
  20. if(array[i] != 0) {
  21. printf("%d %d", array[i], i);
  22. count--; /* 处理空格的操作 */
  23. if(count != 0) {
  24. printf(" ");
  25. }
  26. }
  27. }
  28. }
  29. return 0;
  30. }