当前位置: 首页 > news >正文

多项式相加[C++实现]


/**
############################################################################
1、 结果多项式另存
2、 扫描两个相加多项式,若都未检测完:
 2.1、若当前被检测项指数相等,系数相加。
      若未变成 0,则将结果加到结果多项式。
 2.2、若当前被检测项指数不等,
      将指数小者加到结果多项式。
3、 若有一个多项式已检测完,
    将另一个多项式剩余部分复制到结果多项式。
############################################################################
*/

#include <iostream>
using namespace std;

#define maxTerms 100  //存放指系数的长度

class term{
public:    
    //系数
    float coef;
    //指数
    int exp;
};


class Polynomial{
private:
    //当前空闲位置指针
    static int free;
    //多项式始末位置
    int start,finish;
    //项数组
    static term termArray[maxTerms];
public:
    Polynomial operator+(Polynomial B);
    void NewTerm(float c, int e);
    char compare(int a, int b);
    void Print();
    void create();
};

term Polynomial::termArray[maxTerms];
int Polynomial::free;

void Polynomial::Print(){
    int n = start;
    for(int i = n; i<= finish; i++){
        cout<<"系数="<<termArray[i].coef<<"  ";
    }
    cout<<endl;
    n = start;
    for(i = n; i<= finish; i++){
        cout<<"指数="<<termArray[i].exp<<"    ";
    }
    cout<<endl;
}

void Polynomial::create(){
    cout<<"###############################################"<<endl;
    start = finish = free = (free>0)?free:0;
    char ch = 'a';
    while(ch!='#'){
        cout<<"系数:";
        cin>>termArray[free].coef;
        cout<<"指数:";
        cin>>termArray[free].exp;
        free++;
        cout<<"是否继续添加[输入#结束]:"<<endl;
        cin>>ch;
    }
    finish = free - 1;
}

char Polynomial::compare(int a, int b){
    if( a==b ){
        return '=';
    }else if( a>b ) {
        return '>';
    }else if( a<b ) {
        return '<';
    }
    return '\n';
}

//把一个新的项加到多项式C(x)中
void Polynomial::NewTerm(float c, int e){
    if( free>=maxTerms ){
        cout<<"Too many terms in polynomials"<<endl;
        exit(1);
    }
    termArray[free].coef = c; //系数
    termArray[free].exp = e;  //指数
    free++;
}

Polynomial Polynomial::operator+(Polynomial B){
    Polynomial C;
    int a = start;
    int b = B.start;
    C.start = free;
    float c;
    while( a<=finish && b<=B.finish ){
         //比较对应项指数
        switch( compare(termArray[a].exp, termArray[b].exp) ) {
            case '='://指数相等
                 //系数相加
                c = termArray[a].coef + termArray[b].coef;
                if(c)
                    NewTerm(c, termArray[a].exp);
                a++;
                b++;
                break;
            case '>': //b指数小, 建立新项
                NewTerm(termArray[b].coef, termArray[b].exp);
                b++;
                break;
            case '<':
                NewTerm(termArray[a].coef, termArray[a].exp);
                a++;
                break;
        }
    }
    //a未检测完时
    for(; a<=finish; a++)
        NewTerm(termArray[a].coef, termArray[a].exp);
    //b未检测完时
    for(; b<=B.finish; b++)
        NewTerm(termArray[b].coef, termArray[b].exp);
    C.finish = free - 1;

    return C;
}


int main(){

    Polynomial A;
    A.create();
    A.Print();
    Polynomial B;
    B.create();
    B.Print();
    Polynomial C = A + B ;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    A.Print();
    cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
    B.Print();
    cout<<"====================================================="<<endl;
    C.Print();
    
    return 0;
}

相关文章:

  • 帮助你生成放大镜效果的jQuery插件 - Melens
  • CRM 相关术语 (一)
  • 善用分层存储与数据去重实现存储优化
  • C#中异常的记录——log4net
  • 查看Firefox 浏览器保存站点密码的方法
  • Win8没声音的解决办法
  • 交换机的生成树技术应用实训
  • asp.net MVC 约定
  • 处理由引用计数引起的泄漏
  • javascript操作JSON
  • 五大内存分区,堆与栈的区别(转)
  • media query
  • 电脑维修常见软件工具
  • 在ArcMap中将 DEM 显示为晕渲地貌效果
  • [程序猿感悟] 风雨20年:我所积累的20条编程经验
  • 2017年终总结、随想
  • Angular6错误 Service: No provider for Renderer2
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • docker python 配置
  • Javascript 原型链
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • webpack+react项目初体验——记录我的webpack环境配置
  • Xmanager 远程桌面 CentOS 7
  • 每天10道Java面试题,跟我走,offer有!
  • 如何解决微信端直接跳WAP端
  • 微信公众号开发小记——5.python微信红包
  • 用 Swift 编写面向协议的视图
  • 再谈express与koa的对比
  • 在Docker Swarm上部署Apache Storm:第1部分
  • FaaS 的简单实践
  • k8s使用glusterfs实现动态持久化存储
  • ​ArcGIS Pro 如何批量删除字段
  • # Panda3d 碰撞检测系统介绍
  • # 数据结构
  • #13 yum、编译安装与sed命令的使用
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (七)Knockout 创建自定义绑定
  • (十一)c52学习之旅-动态数码管
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)树状数组
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *上位机的定义
  • .bat文件调用java类的main方法
  • .mysql secret在哪_MySQL如何使用索引
  • .net 程序发生了一个不可捕获的异常
  • .net 托管代码与非托管代码
  • .net对接阿里云CSB服务
  • .sdf和.msp文件读取
  • @ConditionalOnProperty注解使用说明
  • [1525]字符统计2 (哈希)SDUT
  • [android] 请求码和结果码的作用