多项式运算

#include <iostream>
using namespace std;
typedef struct LNode
{
    float x;
    int z;
    struct LNode *next;
} LNode, *LinkList;
void Input(LinkList &Head)
{
    Head = new LNode;
    Head->next = NULL;
    LinkList r, p;
    int i, n;
    r = Head;
    cout << "请输入多项式的项数" << endl;
    cin >> n;
    for (i = 1; i <= n; i++)
    {
        p = new LNode;
        cout << "请输入第" << i << "项的系数:";
        cin >> p->x;
        cout << "请输入第" << i << "项的指数:";
        cin >> p->z;
        p->next = NULL;
        r->next = p;
        r = p;
    }
    r = Head->next;
    cout << "- - - - - - - - - - - - - - - - - - - - - - - -" << endl;
    cout << "-                                             -" << endl;
    cout << "-\t\t";
    while (r)
    {
        if (r->x == 1)
        {
            if (r->z == 0)
                cout << r->x;
            else if (r->z == 1)
                cout << "x";
            else
                cout << "x^" << r->z << "";
            r = r->next;
            if (r)
                cout << "+";
            else
                cout << endl;
        }
        else if (r->x == 0)
        {
            r = r->next;
            if (!r)
                cout << endl;
        }
        else
        {
            if (r->z == 0)
                cout << r->x;
            else if (r->z == 1)
                cout << r->x << "x";
            else
                cout << r->x << ""
                     << "x^" << r->z << "";
            r = r->next;
            if (r)
                cout << "+";
            else
                cout << endl;
        }
    }
    cout << "-                                             -" << endl;
    cout << "- - - - - - - - - - - - - - - - - - - - - - - -" << endl;
}
void add(LinkList &HA, LinkList &HB)
{
    LinkList pa, pb, r, pc;
    pc = HA;
    int sum;
    pa = HA->next;
    pb = HB->next;
    while (pa && pb)
    {
        if (pa->z == pb->z)
        {
            sum = pa->x + pb->x;
            if (sum == 0)
            {
                r = pa;
                pa = pa->next;
                delete r;
                r = pb;
                pb = pb->next;
                delete r;
            }
            else
            {
                pa->x = sum;
                pc->next = pa;
                pc = pa;
                pa = pa->next;
                r = pb;
                pb = pb->next;
                delete r;
            }
        }
        else if (pa->z < pb->z)
        {
            pc->next = pa;
            pc = pa;
            pa = pa->next;
        }
        else
        {
            pc->next = pb;
            pc = pb;
            pb = pb->next;
        }
    }
    pc->next = pa ? pa : pb;
    delete HB;
    cout << "求和后的多项式为:" << endl;
    cout << "- - - - - - - - - - - - - - - - - - - - - - - -" << endl;
    cout << "-                                             -" << endl;
    cout << "-\t\t";
    pa = HA->next;
    while (pa)
    {
        if (pa->x == 1)
        {
            if (pa->z == 0)
                cout << pa->x;
            else if (pa->z == 1)
                cout << "x";
            else
                cout << "x^" << pa->z << "";
            pa = pa->next;
            if (pa)
                cout << "+";
            else
                cout << endl;
        }
        else if (pa->x == 0)
        {
            pa = pa->next;
            if (!pa)
                cout << endl;
        }
        else
        {
            if (pa->z == 0)
                cout << pa->x;
            else if (pa->z == 1)
                cout << pa->x << "x";
            else
                cout << pa->x << ""
                     << "x^" << pa->z << "";
            pa = pa->next;
            if (pa)
                cout << "+";
            else
                cout << endl;
        }
    }
    cout << "-                                             -" << endl;
    cout << "- - - - - - - - - - - - - - - - - - - - - - - -" << endl;
}
int main()
{
    while (1)
    {
        int F;
        LinkList HA, HB;
        Input(HA);
        Input(HB);
        add(HA, HB);
        cout << "按【0】退出" << endl;
        cout << "按【1】继续" << endl;
        cin >> F;
        if (F == 1)
            continue;
        if (F == 0)
            break;
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值