精华内容
下载资源
问答
  • 多项式加法

    2013-05-09 21:15:44
    多项式加法#include #include #include #define Length sizeof(struct node) #define NULL 0 struct node
  • C语言多项式加法.docC C 语言语言题目题目- -多项式加法多项式加法 多项式加法(10 分) 题目内容题目内容 一个多项式可以表达为 x的各次幂与系数乘积的和,比如 2x63x512x36x20 现在,你的程序要读入两个多项式,然后...

    C语言多项式加法.doc

    C C 语言语言题目题目- -多项式加法多项式加法 多项式加法(10 分) 题目内容题目内容 一个多项式可以表达为 x的各次幂与系数乘积的和,比如 2x63x512x36x20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输 出。 程序要处理的幂最大为 100。 输入格式输入格式 总共要输入两个多项式,每个多项式的输入格式如下 每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最 高幂,最后一行一定是 0 次幂。 注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为 0,就不出现在输入数 据中了;0 次幂的系数为 0 时还是会出现在输入数据中。 输出格式输出格式 从最高幂开始依次降到 0 幂,如 2x63x512x3-6x20 注意其中的 x是小写字母 x,而且所有的符号之间都没有空格,如果某个幂的系数为 0 则不需要有那项。 输入样例输入样例 6 2 5 3 3 12 1 6 0 20 6 2 5 3 2 12 1 6 0 20 输出样例输出样例 4x66x512x312x212x40 时间限制时间限制500ms 内存限制内存限制32000kb 代码代码 include 此程序需要分 3 种情况,一、幂为 0;二、幂为 1;三、 幂大于 1 int a105,b105; int main int x,y; while scanf“dd“, if x0 break; while scanf“dd“, if x0 break; for int i0;i1;i if ai 系数不为 0 if ai0 系数大于 0 的情况 if ai1 系数等于 1 的情况 if flag0输出的式子是第一个式子 printf“xd“,i; flag1; else printf“xd“,i; 输出的式子不是第一个式子 else 系数大于 1 的情况 if flag0 printf“dxd“,ai,i; flag1; else printf“dxd“,ai,i; else 系数小于 0 的情况 if ai-1 printf“-xd“,i; else printf“dxd“,ai,i; if a1 if a10 if a11 if flag0 printf“x“; flag1; else printf“x“; else if flag0 printf“dx“,a1; flag1; else printf“dx“,a1; else if a1-1 printf“-x“; else printf“dx“,a1; if a00 if flag0 printf“d“,a0; flag1; else printf“d“,a0; if a00 printf“d“,a0; printf“n“; return 0;

    展开全文
  • PAGE 1 多项式加法报告书 1100400310 王肖伊 作业题目 多项式加法 作业目的 运用数据结构与算法课程中学到的知识编写一个程序能实现以下功能将两个一元高次多项式从外部无序输入处理成降序排列最后相加得到一降序...
  • 链表的多项式加法 老师给的模板看的我不要不要的,真心难看,看了很久才把重载加法搞定了。 #include using namespace std; #include //定义结点类 用于表示多项式的一项 class Node { friend class ...



                                                       链表的多项式加法

    老师给的模板看的我不要不要的,真心难看,看了很久才把重载加法搞定了。



    #include <iostream>
    using namespace std;
    #include <conio.h>
    
    //定义结点类 用于表示多项式的一项 
    class Node {
    friend class Polynomial;
    public:
      Node() {
        next = NULL;
      }
      Node(int nExp,int nCoef) {
        Exp = nExp;
        Coef = nCoef;
        next = NULL;
      }
    private:
      int Exp;   //指数 
      int Coef;  //系数 
      Node* next;
    };
    
    //定义多项式类 
    class Polynomial {
    public:
       Polynomial();
       Polynomial(int a[][2],int n); //构造函数,n表示结点个数 
       Polynomial(const Polynomial& other); //拷贝构造函数 
       Node* Locate(int nExp);  //根据指数查找结点
       void Insert(Node* p,int nExp,int nCoef); //在一个多项式链表中插入一项 
       //查找多项式中指数等于nExp的项,如果查找成功则返回指向该项的指针,
       //如果查找不成功,则放回指向指数最大但小于nExp的项 
       Polynomial operator +(const Polynomial& other);//重载+,实现多项式相加
       void Print();  //将多项式输出显示
    private:
       Node* head;
       Node* pre;
    };
    
    Polynomial::Polynomial() {
       head = new Node();
    }
    
    //利用单链表实现对多项式的存储
    Polynomial::Polynomial(int a[][2],int n) {
       head = new Node();
       Node *p,*s;
       p = head;
       for(int i=0;i<n;i++) {
          s = new Node(a[i][0],a[i][1]);
          p->next = s;
          p = s;
       }
    }
    //重载构造函数
    Polynomial::Polynomial(const Polynomial& other) {
       head = new Node();
       Node *p,*s,*q;
       p = head;
       q = (other.head)->next;
       while(q != NULL) {
          s = new Node(q->Exp,q->Coef);
          p->next = s;
          p = s;
          q = q->next;
       }
    }
    //根据指数查找,如果查找成功则返回指向该项的指针,
    //如果查找不成功,则返回指向指数最大但小于nExp的项 
    Node* Polynomial::Locate(int nExp){
       Node *p,*q;
       p = head;
       q = p->next;
       while ((q!=NULL)&&(q->Exp<=nExp)){
         if(q->Exp == nExp) 
         {
    		 pre = p;
           return q;
         }
         p = q;
         q = p->next;
       }
       return p;
    }
    
    //在单链表的p结点后插入结点到
    void Polynomial::Insert(Node* p,int nExp,int nCoef) {
       Node* s;
       s = new Node(nExp,nCoef);
       s->next = p->next;      
       p->next = s;
    }
    
    Polynomial Polynomial::operator +(const Polynomial& other) 
    {
       Polynomial temp(*this);  //引入一个临时对象,但注意重载构造函数,深拷贝
       //请自行完成,实现多项式的加法
       //算法思想
       //如果指数不相同,则将结点插入单链表适当的位置(单链表根据指数排序)
       //如果指数相同,则将系数相加,但系数为0,删除结点。
       Node* t=other.head->next,*p,*q;
       while(t!=NULL)
       {
    	  q = temp.Locate(t->Exp);
    	   if(q->Exp==t->Exp)
    	   {
    		   if(q->Coef+t->Coef==0){
    			   p = q;
    			   pre->next = q->next;
    			   delete p;
    		   }
    		   else
    		   {
    			   q->Coef+=t->Coef;
    		   }
    	   }
    	   else
    	   {
    		   temp.Insert(q,t->Exp,t->Coef);
    	   }
    	   t = t->next;
       }
       return temp;
    }
    
    void Polynomial::Print() 
    {
      //将多项式输出,
      //请考虑各种情况,如系数为1,指数为1等情况
    	Node* t=head->next, *k;
    	while (t!=NULL)
    	{
    		if (t->Coef != 1)
    			cout << t->Coef << "x";
    		else
    			cout << "x";
    		if ( t->Exp!= 1)
    			cout << "^" << t->Exp << " -> ";
    		else
    			cout << " -> ";
    		t = t->next;
    	}
    	cout <<" end!" << endl;
      
    }
    
    
    int main()
    {
       int a1[4][2] = {{1,1},{2,2},{3,3},{5,5}};
       int a2[4][2] = {{0,1},{2,3},{4,1},{6,1}};
       Node* p;
       Polynomial Result;
       Polynomial p1(a1,4);
       p1.Print();
       Polynomial p2(a2,4);
       p2.Print();
       Result = p1 + p2;
       Result.Print();
       getch();
    }
    


    展开全文

空空如也

空空如也

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

多项式加法