精华内容
下载资源
问答
  • 一元多项式

    千次阅读 2016-03-30 21:53:05
    请编写程序对输入的两个一元多项式,并输出求的结果。 输入 输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。 系数和指数均为整数,...

    题目描述

    一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的两个一元多项式求积,并输出求积的结果。

    输入

    输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。 系数和指数均为整数,指数不小于0。

    输出

    输出为求积结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0。

    样例输入

    2 5 1 0 -1 -15 4 3 0 -1 -1

    样例输出

    10 9 6 5 5 4 3 0

    提示



    我的是用数组做的

    #include<stdio.h>
    #include<string.h>
    int a[100000],b[100000],c[100000];
    int main(){
        int i,j;
        int an,m,n;
        m=0;
        n=0;
        int max,maxa,maxb;
        max=0;
        maxa=0;
        maxb=0;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        while(~scanf("%d %d",&n,&m)){
                if(m==-1&&n==-1)
                    break;
                if(maxa<m)
                    maxa=m;
                a[m]=n;
        }
        while(~scanf("%d%d",&n,&m)){
            if(m==-1&&n==-1)
                break;
            if(maxb<m)
                maxb=m;
            b[m]=n;
        }
        max=maxa+maxb;
        for(i=0;i<=maxa;i++){
            for(j=0;j<=maxb;j++){
                n=a[i]*b[j];
                if(n!=0){
                    m=i+j;
                    c[m]+=n;
                }
            }
        }
        int flag=1;
        for(i=max;i>=0;i--){
            if(c[i]!=0){
                flag=0;
                printf("%d %d ",c[i],i);
            }
        }
        if(flag)
            printf("0");
        printf("\n");
        return 0;
    }
    



    展开全文
  • 计算多项式

    2017-04-18 11:24:32
    求两个多项式成绩: pa=an*x^n + an-1*x^(n-1) + …… + a0 pb=bm*x^m + bm-1*x^(m-1) + …… + b0 其中an,an-1…… a0,bm,bm-1……b0均为正数,范围[-10000,10000],0,m pa和pb的格式为“(-3,5),(87,4),(93,3),(3...

    求两个多项式成绩:
    pa=an*x^n + an-1*x^(n-1) + …… + a0
    pb=bm*x^m + bm-1*x^(m-1) + …… + b0
    其中an,an-1…… a0,bm,bm-1……b0均为正数,范围[-10000,10000],0<=n,m<=1000.
    pa和pb的格式为“(-3,5),(87,4),(93,3),(3,0)”表示一个多项式-3x^5+87x^4+93x^3+3
    输出也是这样的标准格式

    分析:这里需要使用集合类中的Map集合来做,Map是用键值对来存储数据的,所以我们先计算出幂指数并存进map的key中,然后在计算系数并更新存入对应的key的value中。
    代码如下:

    import java.util.HashMap;
    import java.util.Map;
    /**
     * @author Hutongling
     *
     * @time:2017年4月18日 上午10:06:15
     */
    public class 多项式相乘 {
    
        static Map<Integer, Integer> multiplyPolynormial(String pA,String pB){
    
            //处理原始的字符串得到每个整数用于计算多项式之积
            String a1=pA.replaceAll("\\(", "");
            String a2=a1.replaceAll("\\)", "");
            String b1=pB.replaceAll("\\(", "");
            String b2=b1.replaceAll("\\)", "");
            String[] pAStrings=a2.split(",");
            String[] pBStrings=b2.split(",");
            int[] coff1=new int[pAStrings.length/2];//存储系数
            int[] exp1=new int[pAStrings.length/2];//存储幂指数
            int j=0,k=0;
            for(int i=0;i<pAStrings.length;i++){
                if(i%2==0){
                    coff1[j]=Integer.parseInt(pAStrings[i]);
                    j++;
                }
                else{
                    exp1[k]=Integer.parseInt(pAStrings[i]);
                    k++;
                }
            }
    
            int[] coff2=new int[pBStrings.length/2];//存储系数
            int[] exp2=new int[pBStrings.length/2];//存储幂指数
            j=0;
            k=0;
            for(int i=0;i<pBStrings.length;i++){
                if(i%2==0){
                    coff2[j]=Integer.parseInt(pBStrings[i]);
                    j++;
                }
                else{
                    exp2[k]=Integer.parseInt(pBStrings[i]);
                    k++;
                }
            }
    
            Map<Integer, Integer> map=new HashMap<Integer,Integer>();
            for(int i=0;i<exp1.length;i++)
                for(int t=0;t<exp2.length;t++)
                    map.put((exp1[i]+exp2[t]), 0);
            for(int i=0;i<exp1.length;i++)
                for(int t=0;t<exp2.length;t++){
                    int cofftemp=coff1[i]*coff2[t];
                    int exp=exp1[i]+exp2[t];
                    int coff=cofftemp+map.get(exp);
                    map.put(exp, coff);
                }
                return map;
        }
    
        public static void main(String[] args) {
            String pA = "(-3,5),(87,4),(93,3),(3,0)";
            String pB = "(-3,5),(87,4),(93,3),(3,0)";
            Map<Integer, Integer> map = multiplyPolynormial(pA, pB);
            System.out.print(map);
            int[] coff=new int[map.size()];
            int[] exp=new int[map.size()];
            int count=0;
            for(Integer exptemp:map.keySet()){
                exp[count]=exptemp;
                coff[count]=map.get(exptemp);
                count++;
            }
            String result="(";
            for(int i=exp.length-1;i>=0;i--)
                if(i!=0)
                    result+=coff[i] + "," + exp[i] + "),(";
                else
                    result+=coff[i] + "," + exp[i] + ")";
            System.out.println("\n" + result);
        } 
    
    }
    

    代码结果:
    {0=300, 3=9327, 4=8721, 5=-327, 6=837, 7=1434, 8=-255, 9=-804, 10=27}
    (27,10),(-804,9),(-255,8),(1434,7),(837,6),(-327,5),(8721,4),(9327,3),(300,0)

    展开全文
  • 问题描述:判断p(x),q(x)之是否等于r(x),p,q,r分别为m,n,l 阶多项式 Random_polynomial(p(x),q(x),r(x),m,n,l) 输入:随机选取X[1:k+1] 输出:p(x)*q(x)是否等于r(x) 1 K =max{m+n,l} 2 For k=1 to K do 3 X[k]

    问题描述:判断p(x),q(x)之积是否等于r(x),p,q,r分别为m,n,l 阶多项式

    Random_polynomial(p(x),q(x),r(x),m,n,l)

    输入:随机选取X[1:k]

    输出:p(x)*q(x)是否等于r(x)

    1          K =max{m+n,l}

    2          For k=1 to K do

    3              X[k] = random(real)    //no repeat

    4          For k=1 to K do

    5              If(p(X[k])* q(X[k])!= r(X[k])) then

    6                  Return false

    7          Return true

    获得正确解的概率:

             若p(x)*q(x)与r(x)阶数相同成立,则对任意的k成立,输出正确解;若不成立,除非找到p(x)*q(x)-r(x)=0的k个根,否则等式一定不成立。

    设实数集合大小为S,则找到k个根的概率为max{m+n,l}/S,因此一定为错误解的概率为max{m+n,l}/S。

    时间复杂度:O(max{m+n,l})

    综上所述,若算法返回false则一定位正确解;若放回true,则正确解的概率为1-max{m+n,l}/S。

    由于算法并不能总获得问题的正确解,显然该随机算法为蒙特卡洛算法。

    展开全文
  • #include <stdio.h>#include <stdlib.h>#include <math.h>typedef struct Node{ int coef;//系数 int exp;//指数 struct Node *next;...PolyNode *Creatpoly()//创建多项式的单链表,尾插法{ Po...

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    typedef struct Node
    {
        int coef;//系数
        int exp;//指数
        struct Node *next;
    }PolyNode;

    PolyNode *Creatpoly()//创建多项式的单链表,尾插法
    {
        PolyNode *h,*p,*q;
        h=(PolyNode *)malloc(sizeof(PolyNode));//链表头结点
        p=h;
        p->next=NULL;
        printf("please input the Polyomial coef & exp a,b,when input 0 stop\n");
        q=(PolyNode *)malloc(sizeof(PolyNode));
        scanf("%d,%d",&q->coef,&q->exp);
        while(q->coef!=0)
        {
            p->next=q;
            p=q;
            q=(PolyNode *)malloc(sizeof(PolyNode));
            scanf("%d,%d",&q->coef,&q->exp);
        }
        p->next=NULL;
        return(h);
    }

    void Prin_poly(PolyNode *h)//将多项式输出函数
    {
        PolyNode *p;
        p=h->next;
        while(p!=NULL)
        {
            if(p->coef>0&&p!=h->next)
            {
                if(p->exp>0)
                    printf("+%dx^%d",p->coef,p->exp);
                else if(p->exp<0)
                    printf("+%dx^(%d)",p->coef,p->exp);
                else
                    printf("+%d",p->coef);
            }
            else if(p->coef<0&&p!=h->next)
            {
                if(p->exp>0)
                    printf("%dx^%d",p->coef,p->exp);
                else if(p->exp<0)
                    printf("%dx^(%d)",p->coef,p->exp);
                else
                    printf("%d",p->coef);
            }
            else
            {
                if(p->exp>0)
                    printf("%dx^%d",p->coef,p->exp);
                else if(p->exp<0)
                    printf("%dx^(%d)",p->coef,p->exp);
                else
                    printf("%d",p->coef);
            }
            p=p->next;
           }
    }

    void Insort(PolyNode *h)//排序函数,使多项式中的各项按X的升幂排列
    {
        PolyNode *s,*p;
        int t,m;
        for(p=h->next;p!=NULL;p=p->next)//类似于冒泡排序
        {
            for(s=h->next;s->next!=NULL;s=s->next)
            {
                if(s->exp>s->next->exp)
                {
                    t=s->exp;
                    m=s->coef;
                    s->coef=s->next->coef;
                    s->exp=s->next->exp;
                    s->next->coef=m;
                    s->next->exp=t;
                }
            }
        }
    }

    void UnitePoly(PolyNode *h)//合并同类项
    {
        PolyNode *p1,*p2,*q1,*q2,*temp;
        q1=h;
        p1=q1->next;
        while(p1!=NULL)
        {
            p2=p1->next;
            q2=p1;
            while(p2!=NULL)
            {
                if(p1->exp==p2->exp)
                {
                    p1->coef=p1->coef+p2->coef;
                    if(p1->coef==0)
                    {
                        temp=p2;
                        q2->next=p2->next;
                        free(temp);
                        temp=p1;
                        q1->next=p1->next;
                        p1=q1;
                        free(temp);
                        break;
                    }
                    else
                    {
                        temp=p2;
                        q2->next=p2->next;
                        p2=p2->next;
                        free(temp);
                    }
                }
                else
                {
                    q2=p2;
                    p2=p2->next;
                }
            }
            q1=p1;
            p1=p1->next;
        }
    }

    PolyNode *polymuti(PolyNode *h1,PolyNode *h2)//多项式相乘
    {
        PolyNode *h,*p,*p1,*p2,*q;
        p1=h1->next;
        h=p=(PolyNode *)malloc(sizeof(PolyNode));
        p->next=NULL;
        while(p1)
        {
            p2=h2->next;
            while(p2)
            {
                q=(PolyNode *)malloc(sizeof(PolyNode));
                q->coef=p1->coef*p2->coef;
                q->exp=p1->exp+p2->exp;
                p->next=q;
                p=q;
                p2=p2->next;
            }
            p1=p1->next;
        }
        p->next=NULL;
        return(h);
    }
    int main()
    {
        PolyNode *h1,*h2,*h;
        h1=Creatpoly();
        printf("the Polyomial is P1(x)=");
        UnitePoly(h1);
        Insort(h1);
        Prin_poly(h1);
        printf("\n");
        h2=Creatpoly();
        printf("the Polyomial is P2(x)=");
        UnitePoly(h2);
        Insort(h2);
        Prin_poly(h2);
        printf("\n");
        printf("press any key to check the result\n");
        getch();
        printf("after multi the result is P(x)=");
        h=polymuti(h1,h2);
        UnitePoly(h);
        Insort(h);
        Prin_poly(h);
        printf("\n");
        return 0;
    }

    转载于:https://www.cnblogs.com/nannanITeye/p/3655214.html

    展开全文
  • 知道两个多项式相乘的规则,同时注意边界,题目给的是0-1000之间,因此开的数组必须大于1001. #include&lt;cstdio&gt; #include&lt;algorithm&gt; using namespace std; int main(){ int n1, n2,...
  • problem description   This time, you are supposed to find A×B where A ...  这一次,你应该找到 A × B ,其中 A 和 B 是两个多项式。 Input Specification:   Each input file contains one test case....
  • 1009. Product of Polynomials (25)原题... A+B for Polynomials (25)(求两个多项式的和)This time, you are supposed to find A*B where A and B are two polynomials.Input Specification:Each input file contain
  • #include"stdio.h" #include<malloc.h> #define Maxlen 1000 typedef int ElemType; #define Success 1 #define ERROR 0 typedef int Status; typedef struct PolyNode ... struct Po...
  • 当前位置:我的异常网» C语言»链表透过文件读写计算两个多项式链表透过文件读写计算两个多项式www.myexceptions.net网友分享于:2014-03-24浏览:10次链表通过文件读写计算两个多项式写了这个程序,...
  • 若一整系数$n$次多项式在有理数域可约,则总可以分解成次数小于$n$的两整系数多项式. \begin{align*} f(x)=(\frac{a_n}{b_n}x^n+\frac{a_{n-1}}{b_{n-1}}x^{n-1}+\cdots+\frac{a_1}{b_1}x+\frac{a_0}{b_0})(\...
  • 用C语言实现的链表多项式的运算,实现多项式加法和乘法
  • DS||一元多项式的求

    2019-09-19 21:25:40
    请编写程序对输入的两个一元多项式,并输出求的结果。 输入 输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。 系数和指数均为整数,指数不小于0...
  • List | 多项式求和 /

    千次阅读 2020-01-11 02:12:12
    多项式 ADT 目录 一、概述 一元多项式,我们一般用系数表示法来表示,如下图: 可以看到,多项式里最重要的是两个要素:指数(Exponent)与其对应的系数(Coefficient)。对于多项式比较重要的处理是:多项式加法和乘法...
  • 多项式和差操作

    2019-04-11 12:32:18
    cout求多项式积"; cout删除多项式"; cout退出"; cout请输入选择:"; cin>>chioce; while(chioce||chioce>7) { cout请重新输入:"; cin>>chioce; } return chioce; } int main(){ int m,n,chioce; ...
  • 有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的。 基本要求:用带表头结点的单链表作为多项式的存储表示;要建立两个单链表;多项式相加就是要把一个单链表中的结点插入到另一个单链表中...
  • 数据结构实验--链表进行多项式求和与求 数据结构实验--链表进行多项式求和与求 数据结构实验--链表进行多项式求和与求 数据结构实验--链表进行多项式求和与求 数据结构实验--链表进行多项式求和与求
  • 基本上利用顺序表实现了多项式的求和与求运算。但是在求算法上不够精炼.........
  • 1071: 数据结构作业01 -- 一元多项式的求 时间限制: 1 Sec 内存限制: 128 MB 提交: 48 解决: 8 [提交][状态][论坛] 题目描述 一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请...
  • 多项式求和与求

    2008-03-20 16:09:00
    刚做的实验...有些简陋。初次上传
  • 用链式存储结构进行多项式的求和,求是在求和的基础上进行的。
  • 在文本框中输入两个一元多项式,单击相应按钮,求出他们的和、差、、商和余数。使用单链表实现.
  • 多项式

    千次阅读 2013-09-17 14:18:32
    多项式中每一个 x n 皆称之为多项式的项 次数:多项式 x n 中每一项的n为此项的次数 同次项:若有多个多项式,其中每一项的 x k 项称之为同次项 首项:指多项式的项中次数最大者,若多项式首项为n,则称此多项式为n...
  • 多项式运算

    2017-11-04 21:21:14
    (7)求两个多项式;(8)求一个多项式的n次幂;(9)计算一个多项式在x=a处的值。 高级功能:(1)求一个多项式的n阶导函数;(2)求一个多项式的不定积分;(3)求一个多项式在区间[a, b]上的定积分。
  • /*************************************************************...*求多项式的和,(改进版) *核心思想:输入的多项式先排序,再运算 *多项式(p1,p2)求和算法: 1.多项式排序O(logMN); * 2.求和过程,简化成了计算
  • //多项式 int insertorderlist(polynomial L,ElemType x,int i);//插入 void seeorderlist(polynomial L);//显示 polynomial locateorderlist(polynomial L,char *expn,int &i);//定位 void checkorderlist...
  • 程序输入为两行:均为一个多项式,按格式K N1 An1 N2 An2......Nk Ank,K代表的是多项式的非零项数,范围闭区间是[1,10],N1到Nk的范围区间是 1 Nk是指数,Ank是系数,将两个多项式相乘,结果为一个新的多项式。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,818
精华内容 5,127
关键字:

多项式内积