02-2. 一元多项式求导 (25)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
设计函数求一元多项式的导数。
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
设计函数求一元多项式的导数。
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
#include<cstdio>
#include<cstdlib>
using namespace std;
int count = 0;
struct Node//节点结构体
{
int data1;
int data2;
Node* next;
};
typedef struct Node* PtrToNode;//节点指针
typedef PtrToNode Position;//节点位置指针
typedef PtrToNode List;//链表头指针
Position Add(List L, int x1,int x2)//添加元素X
{
Position p, ptr;
ptr = (Position)malloc(sizeof(struct Node));
p = L;
while (p->next != NULL)
{
p = p->next;
}
p->next = ptr;
ptr->data1 = x1;
ptr->data2 = x2;
ptr->next = NULL;
return L;
}
void print(List L)//打印链表
{
if (count == 0)
printf("0 0");
else
{
Position p = L->next;
while (p->next != NULL)
{
printf("%d %d ", p->data1, p->data2);
p = p->next;
}
printf("%d %d", p->data1, p->data2);
}
}
List qiudao(List L1, List L2)//求导
{
Position p1 = L1;
Position p2 = L2;
while (p1->next != NULL)
{
p1 = p1->next;
if (p1->data2 != 0)
{
Add(L2, p1->data1*p1->data2, p1->data2 - 1);
count++;
}
}
return L2;
}
int main()
{
struct Node L;
List p = &L;
p->next = NULL;
struct Node L2;
List p2 = &L2;
p2->next = NULL;
int a, b;
while (scanf("%d%d", &a, &b) != EOF)
{
Add(p, a, b);
}
p2 = qiudao(p, p2);
print(p2);
printf("\n");
}