输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0

输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0

#include <stdio.h>
#include <stdlib.h>
//#include <dos.h>

typedef struct polyNode{
    int coef;
    int exp;
    struct polyNode *next;
}polyNode, *polyList;

void DestroyList(polyList L);

void printList(polyList L);

polyList creatList(int n);

polyList add(polyList a, polyList b);

polyList mul(polyList a, polyList b);

int main()
{
    int n1, n2, i;
    polyList a, b, L1, L2;

    scanf("%d", &n1);
    a = creatList(n1);
    scanf("%d", &n2);
    b = creatList(n2);

    L1 = mul(a, b);
    L2 = add(a, b);

    printList(L1);
    printf("\n");
    printList(L2);
    DestroyList(L1);
    DestroyList(L2);
    //system("pause");
    ;
}

void DestroyList(polyList L)
{
    polyNode * tmp;
    while (L)
    {
        tmp = L->next;
        free(L);
        L = tmp;
    }
}

polyList creatList(int n)
{
    polyNode *head, *r, *p;
    int coef, exp;
    head = (polyNode *)malloc(sizeof(polyNode));
    r = head;

    while (n--)
    {
        scanf("%d%d", &coef, &exp);
        p = (polyNode *)malloc(sizeof(polyNode));
        p->coef = coef;
        p->exp = exp;

        r->next = p;
        r = p;
    }
    r->next = NULL;
    return head;
}

polyList add(polyList a, polyList b)
{
    polyNode *ha, *hb, *p, *r, *h;
    int temp;

    ha = a->next;
    hb = b->next;

    h = (polyNode *)malloc(sizeof(polyNode));
    r = h;

    while (ha != NULL && hb != NULL)
    {
        p = (polyNode *)malloc(sizeof(polyNode));
        if (ha->exp < hb->exp)
        {
            p->exp = hb->exp;
            p->coef = hb->coef;
            hb = hb->next;

            r->next = p;
            r = p;
        }
        else if (ha->exp > hb->exp)
        {
            p->exp = ha->exp;
            p->coef = ha->coef;
            ha = ha->next;

            r->next = p;
            r = p;
        }
        else
        {
            temp = ha->coef + hb->coef;
            )
            {
                p->exp = ha->exp;
                p->coef = temp;

                r->next = p;
                r = p;
            }
            ha = ha->next;
            hb = hb->next;
        }
    }
    while ( hb != NULL )
    {
        p = (polyNode *)malloc(sizeof(polyNode));
        p->exp = hb->exp;
        p->coef = hb->coef;
        hb = hb->next;
        r->next = p;
        r = p;
    }
    while ( ha != NULL )
    {
        p = (polyNode *)malloc(sizeof(polyNode));
        p->exp = ha->exp;
        p->coef = ha->coef;
        ha = ha->next;
        r->next = p;
        r = p;
    }
    r->next = NULL;
    DestroyList(a);
    DestroyList(b);
    return h;
}

polyList mul(polyList a, polyList b)
{
    polyNode *ha, *hb , *r, *p;
    polyList c, tempc;

    ha = a->next;
    hb = b->next;

    c = (polyNode *)malloc(sizeof(polyNode));
    c->next = NULL;

    if (ha == NULL || hb == NULL)
    {
        return c;
    }

    while (ha != NULL)
    {
        tempc = (polyNode *)malloc(sizeof(polyNode));
        r = tempc;
        hb = b->next;
        while (hb != NULL)
        {
            p = (polyNode *)malloc(sizeof(polyNode));
            p->exp = ha->exp + hb->exp;
            p->coef = ha->coef * hb->coef;

            hb = hb->next;
            r->next = p;
            r = p;
        }
        r->next = NULL;
        c = add(c,tempc);
        ha = ha->next;
    }
    return c;
}

void printList(polyList L)
{
    polyNode * x;
    x = L->next;
    if (x == NULL)
    {
        printf("0 0");
    }
    while (x != NULL)
    {
        if (x->next == NULL)
        {
            printf("%d %d", x->coef, x->exp);
        }
        else
            printf("%d %d ", x->coef, x->exp);
        x = x->next;
    }
}

一元多项式的乘法与加法运算(C语言)的更多相关文章

  1. 线性结构2 一元多项式的乘法与加法运算 【STL】

    02-线性结构2 一元多项式的乘法与加法运算(20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和 ...

  2. PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)

    原题地址 https://pta.patest.cn/pta/test/15/exam/4/question/710 5-2 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的 ...

  3. PTA数据结构 习题3.6 一元多项式的乘法与加法运算 (20分)

    一元多项式的乘法与加法运算 https://pintia.cn/problem-sets/434/problems/5865 设计函数分别求两个一元多项式的乘积与和. 时间限制:200 ms 内存限制 ...

  4. 小白专场-多项式乘法与加法运算-c语言实现

    目录 一.题意理解 二.求解思路 三.多项式的表示 3.1 数组 3.2 链表 四.程序框架搭建 五.如何读入多项式 六.如何将两个多项式相加 七.如何将两个多项式相乘 八.如何将多项式输出 一.题意 ...

  5. 小白专场-多项式乘法与加法运算-python语言实现

    目录 题意理解 解题思路 多项式加法 多项式乘法 完整代码 题意理解 题目: 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一 ...

  6. PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  7. 线性结构CT 02-线性结构1 一元多项式的乘法与加法运算

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  8. 浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算

    设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分 ...

  9. 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-04 设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行.每行分别先给出多项式非零项的个数.再以指数 ...

随机推荐

  1. Azure SQL Database (19) Stretch Database 概览

    <Windows Azure Platform 系列文章目录>  Azure SQL Database (19) Stretch Database 概览      Azure SQL Da ...

  2. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  3. EF:Oracle.DataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified

    报告错误:Oracle.DataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifi ...

  4. 每天一个linux命令(45):free 命令

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...

  5. 让easyui datagrid支持bootstrap的tooltip

    让easyui datagrid支持bootstrap的tooltip 发表于 下午 1:53 by ylpro.net & 分类 Java. Easyui在1.3.3版本之前是不支持tool ...

  6. Over:窗口函数(滑动聚合)

    Over 窗口函数在Select 子句中,对查询的结果集进行“滑动-聚合”运算:如果使用count,那么基于滑动窗口的聚合语义同 base+1 累加:如果使用sum,那么基于滑动窗口的聚合语义等同于数 ...

  7. win8下IE10的鼠标mouse事件响应错误BUG

    具体症状就是有时候鼠标左键响应,有时候右键才能响应 问题的原因就是事件对象的detail没有复位 https://github.com/clientside/amplesdk/issues/187

  8. .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译

    apk(android package)就是我们安卓系统的安装文件,可以在模拟器和手机中直接打开安装,从项目中打包apk有几种方式可取 一.最简单的方法(类似我们的winfrom) 只要我们调试或者运 ...

  9. 爬虫技术 -- 进阶学习(十一)【补充】获取html中meta标签中的content的内容

    上一篇网易新闻页面信息抓取 -- htmlagilitypack搭配scrapysharp中提及了很多如何快速抓取html中的文本的语句, 但是meta标签中的content内容的抓取,没有提及到! ...

  10. 3、Redis 基础

    Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ...