C/C++数据结构与算法,一元多项式问题-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

C/C++数据结构与算法,一元多项式问题

2018-07-15 12:26:49 994 2
题目如图所示。谢谢!万分感谢!!
取消 提交回答
全部回答(2)
  • 知与谁同
    2019-07-17 22:53:50
    这个题目已经很清楚了,基本没有算法的问题了
    注意一下最后面提到的输出格式就ok了,比如判定下数字1,还有有效长度截取
    程序逻辑本身就是两重循环,遍历所有输入后,做一次数据归并即可
    0 0
  • liujae
    2019-07-17 22:53:50

    /********************** 输入文件格式有变化。 **************************/

    /*

    创建多项式A:

    4

    -1 4

    8.75 3

    0.5556666 2

    1234.456 1

    A(x) = -x^4 + 8.75x^3 + 0.555667x^2 + 1234.46x

    创建多项式B:

    1

    6007.0012 0

    B(x) = 6007

    运算符 : +-*

    C(x) = -x^4 + 8.75x^3 + 0.555667x^2 + 1234.46x + 6007

    D(x) = -x^4 + 8.75x^3 + 0.555667x^2 + 1234.46x - 6007

    E(x) = -6007x^4 + 52561.3x^3 + 3337.89x^2 + 7.41538e+06x

    A(2) = 2525.13B(2) = 6007

    C(2) = 8532.14

    D(2) = -3481.87

    E(2) = 1.51685e+07

    请按任意键继续. . .

    */ #include <iostream>
    #include <cmath>

    using namespace std;

    #define EPS 1E-6

    typedef struct item {
    double coefficient;
    int power;
    struct item *next;
    } *POLYNOMIAL,*pItem;

    POLYNOMIAL Create() { // 创建多项式
    pItem head,p;
    double coe;
    int pwr,iterms,i;
    head = p = new item;
    cin >> iterms; // 读入多项式的项数 
    for(i = 0; i < iterms; ++i) {
    cin >> coe >> pwr;
    p->next = new item;
    p->next->coefficient = coe;
    p->next->power = pwr;
    p = p->next;
    }
    p->next = NULL;
    return head;
    }

    void Sort(POLYNOMIAL head) { // 按幂次降排序
    pItem pt,q,p = head;
    while(p->next) {
    q = p->next;
    while(q->next) {
    if(p->next->power < q->next->power) {
    pt = p->next;
    p->next = q->next;
    q->next = p->next->next;
    p->next->next = pt;
    }
    else q = q->next;
    }
    p = p->next;
    }
    }

    void Show(POLYNOMIAL head) { // 显示
    POLYNOMIAL p = head->next;
    int flag = 1;
    if(p == NULL) return;
    while(p) {
    if(flag) {
    if(fabs(p->coefficient) >= EPS) {
    if(p->power == 0) cout << p->coefficient;
    else if(p->power == 1) {
    if(p->coefficient == 1.0) cout << "x ";
    else if(p->coefficient == -1.0) cout << "-x ";
    else cout << p->coefficient << "x ";
    }
    else if(p->coefficient == 1.0) cout << "x^" << p->power << " ";
    else if(p->coefficient == -1.0) cout << "-x^" << p->power << " ";
    else cout << p->coefficient << "x^" << p->power << " ";
    flag = 0;
    }
    }
    else if(p->coefficient > 0.0 && fabs(p->coefficient) >= EPS) {
    if(p->power == 0) cout << "+ " << p->coefficient << " ";
    else if(p->power == 1) {
    if(p->coefficient == 1.0) cout << "+ x ";
    else cout << "+ " << p->coefficient << "x ";
    }
    else if(p->coefficient == 1.0) cout << "+ x^" << p->power << " ";
    else cout << "+ " << p->coefficient << "x^" << p->power << " ";
    }
    else if(p->coefficient < 0.0 && fabs(p->coefficient) >= EPS) {
    if(p->power == 0) cout << "- " << -p->coefficient << " ";
    else if(p->power == 1) {
    if(p->coefficient == -1.0) cout << "- x ";
    else cout << "- " << -p->coefficient << "x ";
    }
    else if(p->coefficient == -1.0) cout << "- " << "x^" << p->power << " ";
    else cout << "- " << -p->coefficient << "x^" << p->power << " ";
    }
    p = p->next;
    }
    cout << endl;
    }

    double Power(double x,int n) {
    double value = 1.0;
    int i;
    for(i = 0; i < n; ++i) value *= x;
    return value;
    }

    double Value(POLYNOMIAL head,double x) { // 多项式求值
    POLYNOMIAL p;
    double value = 0.0;
    for(p = head->next; p; p = p->next)
    value += p->coefficient * Power(x,p->power);
    return value;
    }

    POLYNOMIAL Copy(POLYNOMIAL A) {
    POLYNOMIAL head,t,p;
    head = t = new item;
    for(p = A->next; p; p = p->next) {
    t->next = new item;
    t->next->coefficient = p->coefficient;
    t->next->power = p->power;
    t = t->next;
    }
    t->next = NULL;
    return head;
    }

    POLYNOMIAL Additive(POLYNOMIAL A, POLYNOMIAL B) { // 多项式加
    POLYNOMIAL head,p,q,t;
    head = Copy(A);
    for(p = B; p->next; p = p->next) {
    q = head;
    while(q->next) {
    if(p->next->power == q->next->power) {
    q->next->coefficient += p->next->coefficient;
    if(fabs(q->next->coefficient) <= EPS) {
    t = q->next;
    q->next = t->next;
    free(t);
    }
    break;
    }
    q = q->next;
    }
    if(q->next == NULL) {
    q->next = new item;
    q->next->coefficient = p->next->coefficient;
    q->next->power = p->next->power;
    q->next->next = NULL;
    }
    }
    Sort(head);
    return head;
    }

    POLYNOMIAL Subtract(POLYNOMIAL A, POLYNOMIAL B) { // 多项式减
    POLYNOMIAL head,p,q,t;
    head = Copy(A);
    for(p = B; p->next; p = p->next) {
    q = head;
    while(q->next) {
    if(p->next->power == q->next->power) {
    q->next->coefficient -= p->next->coefficient;
    if(fabs(q->next->coefficient) <= EPS) {
    t = q->next;
    q->next = t->next;
    free(t);
    }
    break;
    }
    q = q->next;
    }
    if(q->next == NULL) {
    q->next = new item;
    q->next->coefficient = -p->next->coefficient;
    q->next->power = p->next->power;
    q->next->next = NULL;
    }
    }
    Sort(head);
    return head;
    }

    POLYNOMIAL Multiplication(POLYNOMIAL A, POLYNOMIAL B) { // 多项式乘
    POLYNOMIAL head,t,p,q;
    head = t = new item;
    for(p = A->next; p; p = p->next) { // 完成相乘过程
    for(q = B->next; q; q = q->next) {
    t->next = new item;
    t->next->coefficient = p->coefficient * q->coefficient;
    t->next->power = p->power + q->power;
    t = t->next;
    }
    }
    t->next = NULL;
    Sort(head); // 排序
    p = head;
    while(p->next) { // 合并同类项
    q = p->next;
    while(q->next) {
    if(p->next->power == q->next->power) {
    p->next->coefficient += q->next->coefficient;
    t = q->next;
    q->next = t->next;
    free(t);
    }
    else q = q->next;
    }
    p = p->next;
    }
    return head;
    }

    void FreeMemory(POLYNOMIAL head) {
    POLYNOMIAL q,p = head;
    while(p) {
    q = p;
    p = q->next;
    delete q;
    }
    }

    int main() {
    char ops[3];
    POLYNOMIAL A,B,C = NULL,D = NULL,E = NULL;
    cout << "创建多项式A:\n";
    A = Create();
    Sort(A);
    cout << "A(x) = ";Show(A);
    cout << "创建多项式B:\n";
    B = Create();
    Sort(B);
    cout << "B(x) = ";Show(B);
    cout << "运算符 : ";
    fflush(stdin);
    gets(ops);
    for(int i = 0; ops[i]; ++i) {
    switch(ops[i]) {
    case '+' : C = Additive(A,B);
    cout << "C(x) = ";
    Show(C);
    break;
    case '-' : D = Subtract(A,B);
    cout << "D(x) = ";
    Show(D);
    break;
    case '*' : E = Multiplication(A,B);
    cout << "E(x) = ";
    Show(E);
    break;
    default  : cout << "不能识别运算符 : " << ops[i] << endl;
    }
    }
    cout << "A(2) = " << Value(A,2.0) << endl;
    cout << "B(2) = " << Value(B,2.0) << endl;
    if(C) cout << "C(2) = " << Value(C,2.0) << endl;
    if(D) cout << "D(2) = " << Value(D,2.0) << endl;
    if(E) cout << "E(2) = " << Value(E,2.0) << endl;
    FreeMemory(A);
    FreeMemory(B);
    FreeMemory(C);
    FreeMemory(D);
    FreeMemory(E);
    return 0;
    }

    0 0
添加回答
相关问答

1

回答

如何构建机器学习算法?

问问小秘 2020-04-15 14:07:23 35622浏览量 回答数 1

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144759浏览量 回答数 40

38

回答

干货分享:DBA专家门诊一期:索引与sql优化问题汇总

xiaofanqie 2014-12-25 15:13:38 92109浏览量 回答数 38

37

回答

阿里官方Java代码规范标准《阿里巴巴Java开发手册》下载

管理贝贝 2017-02-10 15:14:36 77756浏览量 回答数 37

53

回答

OSS C/C++ SDK分享交流区

否极泰来 2015-06-15 17:05:09 48074浏览量 回答数 53

13

回答

【阿里云产品公测】开放搜索服务之 智能聊天实现

啊里新人 2014-10-21 10:41:20 33688浏览量 回答数 13

58

回答

技术入门问答集锦,涉及多种技术方向,解决新人学习困惑

管理贝贝 2016-08-03 10:13:27 52765浏览量 回答数 58

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 85383浏览量 回答数 23

26

回答

云数据库OceanBase的架构演进【精品问答集锦】

管理贝贝 2016-09-02 16:57:42 44302浏览量 回答数 26

24

回答

比赛_快速入门_4_19_update_仅供参考,思维不要受局限

小斯never 2015-03-22 18:22:43 33234浏览量 回答数 24
+关注
10077
文章
2994
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载