一元多项式—输入,输出 加法乘法

题目描述:
实现两个一元多项式相加运算。

#include<stdio.h>
#include<stdlib.h>
typedef struct polynomial {
 float coe;
 int exp;
 struct polynomial *next;
}Poly;
Poly *Create_Tail() {
 int m;
 scanf("%d", &m);
 Poly *LA, *pNew, *r;
 float coe1;
 int exp1;
 LA = (Poly *)malloc(sizeof(Poly));
 LA->next = NULL;
 r = LA;
 getchar();
 //printf("请输入系数和指数(输入0 0作为结束): \n");
 scanf("(%f,%d)", &coe1, &exp1);
 while (1) {
  m--;
  pNew = (Poly *)malloc(sizeof(Poly));
  pNew->coe = coe1;
  pNew->exp = exp1;
  r->next = pNew;
  r = pNew;
  if (m == 0) {
   break;
  }
  //printf("请输入系数和指数(输入0 0作为结束): \n");
  scanf("(%f,%d)", &coe1, &exp1);
 }
 r->next = NULL;
 return LA; 
}
void Output(Poly *Head) {
 int flag = 0;
 Poly *LA = Head->next;
 while (LA) {
   if (LA->next == NULL) {
    if (LA->exp == 0) {
     printf("%.f", LA->coe);
     break;
   } else if (LA->exp == 1) {
    printf("%.f", LA->coe);
    printf("X");
    break;
   } else {
    if (LA->coe >= 0) {
     printf("+%.f", LA->coe);
     printf("X^%d", LA->exp);
     break;
    } else {
     printf("%.f", LA->coe);
     printf("X^%d", LA->exp);
     break;
    }
    
   }
  } else {
   if (flag == 0) {
     if (LA->exp == 0) {
     printf("%.f", LA->coe);
     LA = LA->next;
   } else if (LA->exp == 1) {
    printf("%.f", LA->coe);
    printf("X");
    LA = LA->next;
   } else {
    if (LA->coe >= 0) {
     printf("%.f", LA->coe);
     printf("X^%d", LA->exp);
     LA = LA->next;
    } else {
     printf("%.f", LA->coe);
     printf("X^%d", LA->exp);
     LA = LA->next;
    }
    
   }
    flag = 1;
   } else {
    if (LA->exp == 0) {
     printf("+%.f", LA->coe);
     LA = LA->next;
   } else if (LA->exp == 1) {
    printf("+%.f", LA->coe);
    printf("X");
    LA = LA->next;
   } else {
    if (LA->coe >= 0) {
     printf("+%.f", LA->coe);
     printf("X^%d", LA->exp);
     LA = LA->next;
    } else {
     printf("%.f", LA->coe);
     printf("X^%d", LA->exp);
     LA = LA->next;
    }
    
   }
   }
   
  }
 }
}
Poly *add(Poly *Head1, Poly *Head2) {
 Poly *LA, *LB, *LC, *r, *pNew;
 LA = Head1->next;
 LB = Head2->next;
 LC = (Poly *)malloc(sizeof(Poly));
 LC->next = NULL;
 r = LC;
 while (LA && LB) {
  if (LA->exp < LB->exp) {
   r->next = LA;
   r = LA;
   LA = LA->next;
  } else if (LA->exp > LB->exp) {
   r->next = LB;
   r = LB;
   LB = LB->next;
  } else {
   pNew = (Poly *)malloc(sizeof(Poly));
   pNew->coe = LA->coe + LB->coe;
   pNew->exp = LA->exp;
   if (pNew->coe != 0) {
    r->next = pNew;
    r = pNew;
   }
   LA = LA->next;
   LB = LB->next; 
  }
 }
 if (LA) {
  r->next = LA;
 } else {
  r->next = LB;
 }
 return LC;
}
int main() {
 Poly *Head1, *Head2;
 Poly *LC;
 //printf("开始建立第一个多项式:\n");
 Head1 = Create_Tail();
 //printf("输出第一个多项式: \n");
 Output(Head1);
 printf("\n");
 //printf("\n开始建立第二个多项式:\n");
 Head2 = Create_Tail();
 //printf("输出第二个多项式: \n");
 Output(Head2);
 printf("\n");
 LC = add(Head1, Head2);
 Output(LC);
 return 0;
}

只测了几组数据
可能有考虑不很全面的地方。

运行结果:

运行结果
多项式相乘

#include<stdio.h>
#include<stdlib.h>
typedef struct polynomial {
 float coe;
 int exp;
 struct polynomial *next;
}Poly;
Poly *Create_Tail() {
 int m;
 scanf("%d", &m);
 Poly *LA, *pNew, *r;
 float coe1;
 int exp1;
 LA = (Poly *)malloc(sizeof(Poly));
 LA->next = NULL;
 r = LA;
 getchar();
 //printf("请输入系数和指数(输入0 0作为结束): \n");
 scanf("(%f,%d)", &coe1, &exp1);
 while (1) {
  m--;
  pNew = (Poly *)malloc(sizeof(Poly));
  pNew->coe = coe1;
  pNew->exp = exp1;
  r->next = pNew;
  r = pNew;
  if (m == 0) {
   break;
  }
  //printf("请输入系数和指数(输入0 0作为结束): \n");
  scanf("(%f,%d)", &coe1, &exp1);
 }
 r->next = NULL;
 return LA; 
}
void Output(Poly *Head) {
 int flag = 0;
 Poly *LA = Head->next;
 while (LA) {
   if (LA->next == NULL) {
    if (LA->exp == 0) {
     printf("%.f", LA->coe);
     break;
   } else if (LA->exp == 1) {
    printf("%.f", LA->coe);
    printf("X");
    break;
   } else {
    if (LA->coe >= 0) {
     printf("+%.f", LA->coe);
     printf("X^%d", LA->exp);
     break;
    } else {
     printf("%.f", LA->coe);
     printf("X^%d", LA->exp);
     break;
    }
    
   }
  } else {
   if (flag == 0) {
     if (LA->exp == 0) {
     printf("%.f", LA->coe);
     LA = LA->next;
   } else if (LA->exp == 1) {
    printf("%.f", LA->coe);
    printf("X");
    LA = LA->next;
   } else {
    if (LA->coe >= 0) {
     printf("%.f", LA->coe);
     printf("X^%d", LA->exp);
     LA = LA->next;
    } else {
     printf("%.f", LA->coe);
     printf("X^%d", LA->exp);
     LA = LA->next;
    }
    
   }
    flag = 1;
   } else {
    if (LA->exp == 0) {
     printf("+%.f", LA->coe);
     LA = LA->next;
   } else if (LA->exp == 1) {
    printf("+%.f", LA->coe);
    printf("X");
    LA = LA->next;
   } else {
    if (LA->coe >= 0) {
     printf("+%.f", LA->coe);
     printf("X^%d", LA->exp);
     LA = LA->next;
    } else {
     printf("%.f", LA->coe);
     printf("X^%d", LA->exp);
     LA = LA->next;
    }
    
   }
   }
   
  }
 }
}
Poly *add(Poly *Head1, Poly *Head2) {
 Poly *LA, *LB, *LC, *r, *pNew;
 LA = Head1->next;
 LB = Head2->next;
 LC = (Poly *)malloc(sizeof(Poly));
 LC->next = NULL;
 r = LC;
 while (LA && LB) {
  if (LA->exp < LB->exp) {
   r->next = LA;
   r = LA;
   LA = LA->next;
  } else if (LA->exp > LB->exp) {
   r->next = LB;
   r = LB;
   LB = LB->next;
  } else {
   pNew = (Poly *)malloc(sizeof(Poly));
   pNew->coe = LA->coe + LB->coe;
   pNew->exp = LA->exp;
   if (pNew->coe != 0) {
    r->next = pNew;
    r = pNew;
   }
   LA = LA->next;
   LB = LB->next; 
  }
 }
 if (LA) {
  r->next = LA;
 } else {
  r->next = LB;
 }
 return LC;
}
Poly *Multip(Poly *Head1, Poly *Head2) {
 Poly *LA, *LB, *LC, *LD, *r1 = NULL, *pNew, *r2 = NULL;
 int flag = 0, sum = 0;
 LC = (Poly *)malloc(sizeof(Poly));
 LC->next = NULL;
 r1 = LC;
 LA = Head1->next;
 while (LA) {
  LD = (Poly *)malloc(sizeof(Poly));
  LD->next = NULL;
  r2 = LD;
  LB = Head2->next;
  while (LB) {
   pNew = (Poly *)malloc(sizeof(Poly));
   pNew->coe = LA->coe * LB->coe;
   pNew->exp = LA->exp + LB->exp;
   if (flag == 0) {
    r1->next = pNew;
    r1 = pNew;
   } else {
    r2->next = pNew;
    r2 = pNew;
    sum = 1;
   }
   LB = LB->next;
  }
  if (flag == 0) {
   r1->next = NULL;
   flag = 1;
  } else {
   r2->next = NULL;
  }
  if (sum == 1) {
   LC = add(LC, LD);
   flag = 1;
   r1 = NULL;
   r2 = NULL;
  }
  LA = LA->next;
 }
 return LC;
}
int main() {
 Poly *Head1, *Head2;
 Poly *LC;
 //printf("开始建立第一个多项式:\n");
 Head1 = Create_Tail();
 //printf("输出第一个多项式: \n");
 Output(Head1);
 printf("\n");
 //printf("\n开始建立第二个多项式:\n");
 Head2 = Create_Tail();
 //printf("输出第二个多项式: \n");
 Output(Head2);
 printf("\n");
 LC = Multip(Head1, Head2);
 Output(LC);
 return 0;
}

运行结果:
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值