设计函数求一元多项式的导数。(注: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> //标准库头文件
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct Node *LinkList;
typedef struct Node
{
ElemType coef; //多项式系数
ElemType expon; //多项式指数
LinkList next;
}Node;
void Attach(int coef,int expon,LinkList *rear) //将数据存入链表rear指向链表的尾部
{
LinkList p;
p=(LinkList)malloc(sizeof(Node));
p->coef=coef;
p->expon=expon;
p->next = NULL;
(*rear)->next=p;
*rear=p;
}
LinkList ReadNode()
{
LinkList q,rear,temp;
int temp_1,temp_2;
q=(LinkList)malloc(sizeof(Node));
rear=q;
do
{
cin>>temp_1>>temp_2;
Attach(temp_1,temp_2,&rear);
}while(cin.get() != '\n');
temp=q;
q=q->next;
free(temp);
return q;
}
LinkList HandleLink(LinkList L)
{
LinkList L1,L2;
L2=L;
L1=NULL;
while(L2&&L2->expon)
{
L2->coef=L2->coef*L2->expon;
L2->expon--;
L1=L2;
L2=L2->next;
}
if(L2) //如果L2有常数项
{
if(L1) //如果常数项不是唯一的项
{
free(L2);
L1->next=NULL;
}
else
{
L2->coef=0;
}
}
return L;
}
void PrintLink(LinkList L)
{
int flag=0;
int temp_1,temp_2;
while(L)
{
if(!flag)
{
flag=1;
}
else
{
cout<<" ";
}
temp_1=L->coef;
temp_2=L->expon;
cout<<L->coef<<' '<<L->expon;
L=L->next;
}
}
int main()
{
LinkList Ls;
Ls=ReadNode();
Ls=HandleLink(Ls);
PrintLink(Ls);
return 0;
}
第二种方法比较简单,也比较好想,主要是0,0的时候注意一下就可以
#include <iostream>
using namespace std;
int main()
{
int coef,expon;
int flag = 0;
do
{
cin>>coef>>expon;
if(expon>0)
if(flag ==0)
{
cout<<coef*expon<<' '<<expon-1;
flag = 1;
}
else
cout<<' '<<coef*expon<<' '<<expon-1;
if(flag ==0)
cout<<"0 0";
}while(cin.get() != '\n');
return 0;
}