鎏歌 2022-02-08 13:22 采纳率: 54.5%
浏览 90
已结题

一元多项式加法运算的实现

题目描述
编程实现一元多项式的加法运算。(要求用链表实现)

输入
第一行为一元多项式A, 以 0,0 作为输入结束;

第二行为一元多项式B, 以 0,0 作为输入结束。

输出
多项式A和多项式B的和。

样例输入
5,3 7,8 9,15 0,0
2,0 6,3 -7,8 0,0

样例输出//一般格式发不出去,不符合要求
2x0+11x3+9x^1

#include<stdio.h>
#include<malloc.h>
int flag;
typedef struct node
{
    int a;
    int b;
    struct node *next;
}Linklist;
void creat(Linklist *&L)
{
    int m,n;
    Linklist *s,*r;
    L=(Linklist *)malloc(sizeof(Linklist));
    r=L;
    while(1)
    {
        s=(Linklist *)malloc(sizeof(Linklist));
        scanf("%d,%d",&m,&n);
        if(m==0&&n==0)
            break;
        s->a=m;
        s->b=n;
        r->next=s;
        r=s;
    }
    r->next=NULL;
}

void add(Linklist *&Qa,Linklist *&Qb)
{
     
    Linklist *qa,*qb;
    qa=Qa->next;
    qb=Qb->next;
    while(1)
    {
        int m,n,sum;
        m=qa->b;
        n=qb->b;
        if(m<n)
        {
            printf("%dx^%d+",qa->a,qa->b);
            qa=qa->next;
        }
        else if(m==n)
        {
            sum=qa->a+qb->a;
            if(sum!=0)
            {
                qa->a=sum;
                printf("%dx^%d+",qa->a,qa->b);
            }
            qa=qa->next;
            qb=qb->next;
        }
        else
        {
            printf("%dx^%d+",qb->a,qb->b);
            qb=qb->next;
        }
        if(qa==NULL)
        {
            flag=1;
            break;
        }
        if(qb==NULL)
        {
            flag=2;
            break;
        }
    }
    if(flag==1)
    {
        while(qb->next!=NULL)
        {
            printf("%dx^%d+",qb->a,qb->b);
            qb=qb->next;
        }
        printf("%dx^%d",qb->a,qb->b);
    }
    if(flag==2)
    {
        while(qa->next!=NULL)
        {
        printf("%dx^%d+",qa->a,qa->b);
        qa=qa->next;
        }
        printf("%dx^%d",qa->a,qa->b);
    }
 
     
}
int main()
{
    Linklist *pa,*pb;
    creat(pa);
    creat(pb);
    add(pa,pb);
    return 0;
}

我感觉add函数里面m,n比大小是对应的关系(QA第一个数和QB第一个数比较,QA第二个数和QB第二个数比较),但是如果这样显然不符合题意,能讲一下add函数吗

  • 写回答

2条回答 默认 最新

  • orange4reg 2022-02-08 16:29
    关注

    假设qa开始是3x^2(x加上去为了好看),qb开始是2x^3,那么这种情况是先打印qa的,因为2比3小,也就是add里面的m<n小的情况,因为qa已经打印,因此qa=qa next,qb还没动留着下次再做比较。那如果m=n,这样就要先算前面的3+2了,即sum=qa的a+qb的a,因为m==n,所以print (sum, m或者n随便一个),这里qa和qb已经相加输出了,qa和qb都要换到下一个节点。后面m>n,同m<n一样。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 修改了问题 2月8日
  • 创建了问题 2月8日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改