题目链接:http://www.patest.cn/contests/mooc-ds/02-%E7%BA%BF%E6%80%A7%E7%BB%93%E6%9E%842
02-线性结构2. 一元多项式求导 (25)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:3 4 -5 2 6 1 -2 0输出样例:
12 3 -10 1 6 0
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
typedef struct Polynomial{
int data[MAX + 1];
int highPower;
}*Poly;
void ZeroPoly(Poly poly) { //将所有系数置0
for(int i = 0; i < MAX; i++)
poly->data[i] = 0;
poly->highPower = 0;
}
void InitPoly(Poly poly) { //根据输入格式设计的初始化多项式函数
int coef, exp;
scanf("%d%d", &coef, &exp);
poly->data[exp] = coef;
poly->highPower = exp;
while(scanf("%d%d", &coef, &exp) != EOF){
poly->data[exp] = coef;
}
}
void DerivPoly(Poly poly, Poly retPoly) { //求导
if(poly->highPower)
retPoly->highPower = poly->highPower - 1;
for(int i = 1; i <= poly->highPower; i++)
if(poly->data[i]) {
retPoly->data[i - 1] = i * poly->data[i];
}
}
void Print(Poly poly) {
if(poly->highPower == 0 && poly->data[0] == 0)
printf("0 0");
for(int i = poly->highPower; i >= 0; i--) {
if(poly->data[i]) {
if(i != poly->highPower)
printf(" ");
printf("%d %d", poly->data[i], i);
}
}
}
int main() {
Poly poly = (Poly)malloc(sizeof(struct Polynomial));
ZeroPoly(poly);
InitPoly(poly); //读入数据
Poly retPoly = (Poly)malloc(sizeof(struct Polynomial));
ZeroPoly(retPoly);
DerivPoly(poly, retPoly); //求导
Print(retPoly); //输出结果
free(poly);
free(retPoly);
return 0;
}
PS:应用数据结构解题,主要为了练习线性表;非数据结构的简单版本参考:http://blog.csdn.net/ice_camel/article/details/42192607