PAT-B 1010 一元多项式求导(C语言)

题目

链接:PAT (Basic Level) Practice 1010 一元多项式求导

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

输入格式:

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

输出格式:

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

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0


思路

  1. 用两个数组存放输入数据;
  2. 读入数据,当读到回车时输入结束;
  3. 当仅有指数为0项时输出0 0
  4. 指数为0项的导数为0,指数不为0项导数的指数为原指数减1,系数为原系数乘原指数;
  5. 注意空格输出。

代码

#include

int main()
{
  int coef[1001] = {0}, expo[1001] = {0};
  int i;                      //i在前面定义,因为后面要用的
  for(i = 0; i < 1001; i++){
    scanf("%d %d", &coef[i], &expo[i]);
    if(getchar() == '\n'){    //当读到回车时输入结束
      break;
    }
  }
  if(expo[0] == 0 && expo[1] == 0){  //当多项式指数最大为0且无指数小于0时
    printf("0 0");
  }else{
    for(int j = 0; j <= i; j++){
      if(expo[j] == 0){    //当指数为0时,该项导数为0
          coef[j] = 0;
      }
      else{                //当指数不为0时,该项导数的指数为原指数减1,系数为原系数乘原指数
          coef[j] = coef[j] * expo[j];
          expo[j] = expo[j] - 1;
      }
    }
    int flag = 0;    //控制空格的输出
    for(int k = 0; k <= i; k++){
      if(coef[k]){
        if(flag == 0){
          flag = 1;
        }else{
          printf(" ");
        }
        printf("%d %d", coef[k], expo[k]);
      }
    }
  }  
  return 0;
}


---END---

其它相关问题

PAT-B 1006 换个格式输出整数(C语言)
PAT-B 1007 素数对猜想(C语言)
PAT-B 1008 数组元素循环右移问题(C语言)
PAT-B 1009 说反话(C语言)

你可能感兴趣的:(PAT-B 1010 一元多项式求导(C语言))