实现一元多项式的乘法运算。

#include"iostream"
#include"stdio.h"
#include"string.h"
#include"algorithm"
#include"queue"
#include"stack"
#include"ctype.h"
#include"cmath"
#define mx 1005
using namespace std;

struct poly //链表节点数据类型
{
    double ceof;//系数
    int exp;//指数
    poly *next;
};
double A[mx],B[mx];//存放A和B表达式
int adegree,bdegree,maxexp;//存放最高阶数

void init(poly *&pl) //链表初始化
{
    pl=new poly;//动态分配空间,如果出现错误则输出 allocate error
    if(pl==NULL){cout<<"allocate error!"<<endl;}
    else
    {
        pl->next=NULL;
    }
}

void input(poly *&pl,int degree,double X[]) //表达式的输入(存入链表中)
{
    poly *t=pl;
    int i=0;
    while(i<=degree)
    {
        if(X[i]!=0) //系数为零的不用存
        {
            t->next=new poly;
            t=t->next;
            t->ceof=X[i];
            t->exp=i;
        }
        i++;
    }
    t->next=NULL;
}

void output(poly *&pl) //表达式的输出
{
    poly *t=pl->next;
    cout<<"the polynomal is:";
    bool h=true;
    while(t!=NULL)
    {
        if(!h&&t->exp>0.0) cout<<"+";
            h=false;
        cout<<t->ceof;
        switch(t->exp) //根据阶数输出相应的项
        {
            case 0:break;
            case 1:cout<<"x";break;
            default:cout<<"x^"<<t->exp;
        }
        t=t->next;
    }
    cout<<endl;
}

void mul_poly(poly *&pla,poly *&plb,poly *&plc) //实现表达式相乘
{
    double result[mx];//用来记录量表达式相乘后的得到的表达式的系数
    poly *ta,*tb;
    int i,k;
    if(adegree!=-1||bdegree!=-1) //考虑0多项式的情况
    {
        maxexp=adegree+bdegree;
        for(i=0;i<maxexp;i++) result[i]=0.0;
        ta=pla->next;
        while(ta!=NULL)
        {
            tb=plb->next;
            while(tb!=NULL)
            {
                k=ta->exp+tb->exp;
                result[k]+=(ta->ceof)*(tb->ceof);
                tb=tb->next;
            }
            ta=ta->next;
        }
       input(plc,maxexp,result);
    }
}

int main()
{
    poly *pla,*plb,*plc;
    int i,j,_exp;
    double _ceof;
    char ch;
    int case_=0;
    while(++case_)
    {
        cout<<"case "<<case_<<":"<<endl;
        memset(A,0,sizeof(A));
        memset(B,0,sizeof(B));
        init(pla);//初始化,这个操作一定要有
        init(plb);
        init(plc);
        ch=‘0‘;
        cout<<"input A poly:";
        while(ch!=‘\n‘)//A表达式的输入
        {
            cin>>_ceof;
            getchar();getchar();
            cin>>_exp;
            ch=getchar();
            A[_exp]=_ceof;
            adegree=_exp;
        }
        input(pla,adegree,A);
        cout<<"input B poly:";
           ch=‘0‘;
        while(ch!=‘\n‘)//B表达式的输入
        {
            cin>>_ceof;
            getchar();getchar();
            cin>>_exp;
            ch=getchar();
            B[_exp]=_ceof;
            bdegree=_exp;
        }
        input(plb,bdegree,B);
        mul_poly(pla,plb,plc);
        output(plc);//输出最终结果
        cout<<endl;
    }
    return 0;
}

时间: 2024-10-11 12:35:07

实现一元多项式的乘法运算。的相关文章

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

设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分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

一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作(1)

数学中一元n次多项式可表示成如下的形式: Pn(x)=p0+p1x+p2x^2+…+pnx^n     (最多有 n+1 项,n +1 个系数唯一确定她) (1)请设计一套接口用以表示和操作一元多项式 (2)根据上述设计实现一元n次多项式的加法运算 (3)根据上述设计实现一元n次多项式的乘法运算 分析:  题目大概意思: 数学里常见的一元 n 次表达式,设计出加减乘除的函数(方法),同时提供对外接口,把内部实现封装起来,而 n 的大小没有指定. 问题的本质: 就是一系列的单个未知数 x,指数和系

线性表在一元多项式运算中的应用

实验题1-1 多项式运算 [问题描述]有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积. [提示] 用带表头结点的单链表作为多项式的存储表示:要建立两个单链表:多项式相加就是要把一个单链表中的结点插入到另一个单链表中去,要注意插入.删除操作中指针的正确修改. #include <iostream> using namespace std; int k = 1; typedef struct { float coef; //系数 int expn; //指数 }term;

数据结构之一元多项式的加法和乘法

Polynomial.h 1 #define _CRT_SECURE_NO_DEPRECATE 2 #include "Polynomial.h" 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 int ListLength(NormLinkList *L) 7 { 8 int num = 0; 9 Link p = NextPos(L, GetHead(L)); 10 while(p) 11 { 12 num++;

一元多项式的运算

以一元多项式加法运算为例: A,B可用线性链表可以表示为: “和多项式”链表如下(图中的长方框表示已经被释放的结点): #include <stdio.h> #include <stdlib.h> typedef struct Polyn{ int data; int index; struct Polyn *next; }Polyn,*Polynlist; void CreatPolyn(Polynlist &p,int m)//输入m项的系数和指数,建立一元多项式P {

OpenCV中的矩阵乘法运算

转载:http://blog.csdn.net/tangwei2014 OpenCV中矩阵乘法运算 1. Mat*Mat: 第一个矩阵的列数必须等于第二个矩阵的行数. [0, 1, 2, 3;     [0, 0, 0;       [14, 14, 14; 0, 1, 2, 3; *  1, 1, 1;  =    14, 14, 14; 0, 1, 2, 3]      2, 2, 2;        14, 14, 14] 3, 3, 3] 2. Mat.mul(Mat): 两个矩阵维数必

一元多项式的加减乘法

输入一元多项式的参数,然后根据一元多项式加法减法乘法的计算法则,求解最终结果.用到了结构体,指针,操作的时候要注意. 不多说,上代码: 1 #include <stdio.h> 2 #include <malloc.h> 3 4 typedef struct node{ 5 float coef; 6 int expn; 7 struct node *next; 8 }PLOY; 9 10 void start(){ 11 printf("****************

一元多项式化简

背景: 编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式. 说明: l 多项式由若干个单项式组成,单项式之间为加.减(+,-)关系. l 单项式指数字与字母幂的乘积构成的代数式.对一元多项式,字母只有一种. l 同类项合并指将多项式中指数相同的单项式,系数经过加减求和,合并为一个单项式.按指数降序指多项式中,单项式按指数从大到小顺序相连. 格式说明 一元多项式输入输出时以字符串形式表示,格式如下 l单项式之间用单个加减运算符相连,运算符:+,- 2单

一元多项式求导

/* 一元多项式求导 (25) 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数). 数字间以空格分隔. 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数. 数字间以空格分隔,但结尾不能有多余空格. 注意"零多项式"的指数和系数都是0,但是表示为"0 0". 输入样例: 3 4 -5 2 6 1 -2 0 即 3X^4 - 5X^2 + 6X - 2 输出样例: 12 3 -10 1 6