PAT (Basic Level) Practise 1010. 一元多项式求导 (25)

设计函数求一元多项式的导数。(注: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;
} 

版权声明:本文为supinyu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。