设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
分析:
序号 | 输入 | 输出 |
---|---|---|
1 | 3 4 -5 2 6 1 -2 0 | 12 3 -10 1 6 0 |
2 | 5 20 -7 4 3 1 | 100 19 -28 3 3 0 |
3 | 1000 0 | 0 0 |
4 | -1000 1000 999 0 | -1000000 999 |
一:考虑如果前边有非0项输出了,后边的0项就不输出
二:就一项指数为0项,要输出0 0
方法一(简单法):根据分析的性质直接输入和输出
#include<stdio.h>
int main(){
int zs,xs;
scanf("%d %d",&xs,&zs);
if(zs==0) printf("0 0"); //这里是考虑第一项的空格问题和0 0问题
else printf("%d %d",xs*zs,zs-1);
while(scanf("%d %d",&xs,&zs)!=EOF&&zs!=0) //这是从第二项开始如果指数不为0的输出(题目说过不输入系数为0的多项式)
printf(" %d %d",xs*zs,zs-1);
return 0;
}
方法二(结构体法):
#include<stdio.h>
#include<stdlib.h>
typedef struct PolyNode* PtrToPolyNode; //多项式结构体
struct PolyNode{
int Coef;
int Expon;
PtrToPolyNode Next;
};
typedef PtrToPolyNode Polynomial;
void Get(Polynomial P){
Polynomial t,rear;
int coef,expon;
rear=P;
while(scanf("%d %d",&coef,&expon)!=EOF){ //!=EOF表示输出没结束
t=(Polynomial)malloc(sizeof(struct PolyNode));
coef*=expon;
if(expon!=0) --expon; //指数不为0,减一
if(coef==0) expon=0; //系数为0.都为0
t->Coef=coef;
t->Expon=expon;
t->Next=NULL;
rear->Next=t;
rear=t;
}
}
void Print(Polynomial P){
Polynomial t=P->Next;
if(t->Next==NULL) printf("%d %d",t->Coef,t->Expon); //只有一个节点时,直接打印,包括0 0情况
else {
while(t){
if(t->Next&&t->Next->Coef){ //t不是左后一个,且它的下一个的系数不是0,且它的系数不是0
if(t->Coef) printf("%d %d ",t->Coef,t->Expon);
}else { //t是最后一个且它的系数不为0
if(t->Coef) printf("%d %d",t->Coef,t->Expon);
}
t=t->Next;
}
}
}
int main(){
Polynomial P;
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->Next=NULL;
Get(P);
Print(P);
return 0;
}