1. 题目描述
设计函数求一元多项式的导数。
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。
数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。
数字间以空格分隔,但结尾不能有多余空格。
注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
2. 题目分析
咋一看题目一头雾水,但是翻译成数学符号还是比较好理解的:
输入以两个数为一组,即[3,4],[-5,2],[6,1],[-2,0]
其中,前一个数为 多项式系数,后一个数为 多项式指数。
2.1 输入样例还原:
3 x 4 − 5 x 2 + 6 x 1 − 2 x 0 3x^{4}-5x^{2}+6x^{1}-2x^{0}\, 3x4−5x2+6x1−2x0
2.2 求导法则:
若输入a , n
,则输出a*n , n-1
,其中a为多项式系数
2.3 输出样例还原:
12
x
3
−
10
x
1
+
6
x
0
12x^{3}-10x^{1}+6x^{0}\,
12x3−10x1+6x0
(常数项求导为零,不用输出)
3. 题目求解
题目要求啥就直接输出啥,不用想办法保存结果
3.1 先处理特殊情况:零多项式
注意“零多项式”的指数和系数都是 0,但是表示为 0 0。
因为输入是以指数递降方式给出,所以在循环之前先做一个判断if( n == 0) printf("0 0");
3.2 非零多项式:
正常按求导规则直接输出即可:if(n != 0) printf(" %d %d",x*n,n-1);
。
4. AC代码
#include<stdio.h>
int main(void){
int x, n;
scanf("%d %d",&x,&n);
if( n == 0)
printf("0 0");
else
printf("%d %d",x*n,n-1);
while(EOF != scanf("%d %d",&x,&n))
if(n != 0)
printf(" %d %d",x*n,n-1);
return 0;
}