设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为n*xn-1。)
输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。
输入样例:3 4 -5 2 6 1 -2 0输出样例:
12 3 -10 1 6 0
~注意整个导数为0时输出0 0,
#include <stdio.h>
#define Max 1000
int main()
{
int i;
int num = 0,num1 = 0,rsub = 0;
int flag = 0;
int der[Max] = {0};
int rec[Max] = {0};
for(i=0;;i++)
{
scanf("%d",&der[i]);
num++;
if(getchar()=='\n')
break;
}
num1 = num;
for(i=0;i<num;i+=2)
{
if((der[i]*der[i+1])!=0)
{
rec[rsub++] = der[i]*der[i+1];
rec[rsub++] = der[i+1]-1;
flag = 1;
}
else{
num1 -= 2;
}
}
if(flag==0)
{
printf("0 0");
return 0;
}
for(i=0;i<num1-1;i++)
printf("%d ",rec[i]);
printf("%d",rec[i]);
return 0;
}
用链表也尝试了下
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE{
struct NODE *next;
int x;
int y;
}Node,*Linklist;
Linklist create()//尾插法
{
int a,b;
Node *head,*current,*prev;
head = NULL;
while(scanf("%d%d",&a,&b)!=EOF)
{
current = (Node *)malloc(sizeof(Node));
current->x = a;
current->y = b;
if(head==NULL)
{
head = current;
}
else{
prev->next = current;
}
current->next = NULL;
prev = current;
}
return head;
}
int main()
{
int a,b,flag = 0;
Node *p;
p = create();
while(p!=NULL)
{
a = p->x * p->y;
b = p->y - 1;
if(a!=0)
{
if(flag!=0)
printf(" ");
else
flag = 1;
printf("%d %d",a,b);
}
p = p->next;
}
if(flag==0) printf("0 0");
return 0;
}