zoukankan      html  css  js  c++  java
  • 1009 Product of Polynomials

    This time, you are supposed to find A×B where A and B are two polynomials.

    Input Specification:

    Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:

    K N​1​​ a​N​1​​​​ N​2​​ a​N​2​​​​ ... N​K​​ a​N​K​​​​

    where K is the number of nonzero terms in the polynomial, N​i​​ and a​N​i​​​​ (,) are the exponents and coefficients, respectively. It is given that 1, 0.

    Output Specification:

    For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.

    Sample Input:

    2 1 2.4 0 3.2
    2 2 1.5 1 0.5
    
     

    Sample Output:

    3 3 3.6 2 6.0 1 1.6

    题意:

    一元多项式的乘法。

    main函数主要由3部分组成:ReadPoly(), MultPoly()和PrintPoly()。用到的数据结构有:链表。

    难点:指针,指针的指针。

    Code:

    #include<iostream>
    #include<algorithm>
    #include<iomanip>
    
    using namespace std;
    
    typedef struct PolyNode *Polynomial;
    
    struct PolyNode
    {
        double coef;
        int expon;
        Polynomial link;
    };
    
    void Attach(int expon, double coef, Polynomial* rear) {
        Polynomial P = (Polynomial)malloc(sizeof(struct PolyNode));
        P->expon = expon;
        P->coef = coef;
        P->link = NULL;
        (*rear)->link = P;
        (*rear) = P;
    }
    
    Polynomial ReadPoly() {
        Polynomial p, pRear, t;
        int e, N;
        double c;
        p = (Polynomial)malloc(sizeof(struct PolyNode));
        cin >> N;
        p->link = NULL;
        pRear = p;
        while(N--) {
            cin >> e >> c;
            Attach(e, c, &pRear);
        }
        t = p, p = p->link, free(t);
        return p;
    }
    
    Polynomial MultPoly(Polynomial P1, Polynomial P2) {
        Polynomial Rear, t, t1, t2, P;
        int e;
        double c;
    
        if (P1 == NULL || P2 == NULL) return NULL;
    
        t1 = P1, t2 = P2;
        P = (Polynomial)malloc(sizeof(struct PolyNode));
        P->link = NULL;
        Rear = P;
        while(t2) {
            Attach(t1->expon + t2->expon, t1->coef * t2->coef, &Rear);
            t2 = t2->link;
        }
        t1 = t1->link;
    
        while (t1) {
            t2 = P2; Rear = P;
            while (t2) {
                e = t1->expon + t2->expon;
                c = t1->coef * t2->coef;
                while (Rear->link && Rear->link->expon > e) Rear = Rear->link;
                if (Rear->link && Rear->link->expon == e) {
                    if (Rear->link->coef + c) {
                        Rear->link->coef += c;
                    } else {
                        t = Rear->link;
                        Rear->link = t->link;
                        free(t);
                    }
                } else {
                    t = (Polynomial)malloc(sizeof(struct PolyNode));
                    t->expon = e;
                    t->coef = c;
                    t->link = Rear->link;
                    Rear->link = t;
                }
    
                t2 = t2->link;
            }
            t1 = t1->link;
        }
    
        t = P; P = P->link; free(t);
        return P;
    }
    
    void PrintPoly(Polynomial p) {
        Polynomial t = p;
        int len = 0;
        while (t != NULL) {
            len++;
            t = t->link;
        }
        cout << len;
        while(p != NULL) {
            cout << " " << p->expon;
            cout << " " << fixed << setprecision(1) << p->coef;
            p = p->link;
        }
    }
    
    int main() {
        Polynomial p1, p2, pp;
        p1 = ReadPoly();
        p2 = ReadPoly();
    
        pp = MultPoly(p1, p2);
        PrintPoly(pp);
    
        return 0;
    }
    

      

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    修改MySQL表中自增编号
    springboot整合mybatis统一配置bean的别名
    kotlin来了!!
    微信小程序获取登录手机号
    maven--package
    修改oracle数据库时间
    oracle启动停止命令
    安装 MySQL 之后初始密码在哪里??
    EntityFramework~~~三种模式
    webqq协议分析之~~~~验证是否需要验证码
  • 原文地址:https://www.cnblogs.com/h-hkai/p/12584309.html
Copyright © 2011-2022 走看看