题目:求两个多项式相加
polynomial.h
typedef struct Node{
int coefficient;
int exponent;
}Node;
typedef struct Polynomial{
int numOfNode;
Node* n;
}Polynomial;
main.cpp
/*
** 两个多项式相加
**
*/
#include<stdio.h>
#include<stdlib.h>
#include "polynomial.h"
void CreatePolynomial(Polynomial* p);
void Add(Polynomial* p1, Polynomial* p2, Polynomial* sum);
void PrintPolynomial(Polynomial* p);
int main(){
Polynomial* p1 = (Polynomial* )malloc(sizeof(Polynomial));
Polynomial* p2 = (Polynomial* )malloc(sizeof(Polynomial));
printf("输入两个多项式的个数:");
scanf("%d %d",&p1->numOfNode,&p2->numOfNode);
p1->n = (Node* )malloc(sizeof(Node) * p1->numOfNode);
p2->n = (Node* )malloc(sizeof(Node) * p2->numOfNode);
getchar(); //吞掉回车
printf("输入第一个多项式:(形式为:(系数,指数)(系数,指数)):");
CreatePolynomial(p1);
printf("输入第二个多项式:(形式为:(系数,指数)(系数,指数)):");
CreatePolynomial(p2);
PrintPolynomial(p1);
PrintPolynomial(p2);
Polynomial* p = (Polynomial* )malloc(sizeof(Polynomial));
p->numOfNode = p1->numOfNode + p2->numOfNode;
p->n = (Node* )malloc(sizeof(Node) * (p->numOfNode));
for(int i = 0; i < p->numOfNode; i++){
p->n[i].coefficient = 0;
p->n[i].exponent = 0;
}
Add(p1,p2,p);
PrintPolynomial(p);
return 0;
}
void CreatePolynomial(Polynomial* p){
int i = 0;
int tag = 0;
char c;
while((c = getchar()) != '\n'){
p->n[i].coefficient = 0;
p->n[i].exponent = 0;
if(c == '('){
c = getchar();
while(c != ')'){
if(c == ','){
++tag;
}else{
if(tag == 0) //‘,’个数为0时,读入的是系数
p->n[i].coefficient = p->n[i].coefficient * 10 + int(c - '0');
else if(tag == 1) ‘,’个数为1时,读入的是指数
p->n[i].exponent = p->n[i].exponent * 10 + int(c - '0');
}
c = getchar();
}
++i;
tag = 0;
}
}
}
void Add(Polynomial* p1, Polynomial* p2, Polynomial* sum){
int i,j,count;
i = j = count = 0;
while(i < p1->numOfNode && j < p2->numOfNode){
if(p1->n[i].exponent < p2->n[j].exponent){
sum->n[count] = p1->n[i];
++i;
}
else if(p1->n[i].exponent == p2->n[j].exponent){
sum->n[count].exponent = p1->n[i].exponent;
sum->n[count].coefficient = p1->n[i].coefficient + p2->n[j].coefficient;
++i; ++j;
}else if(p1->n[i].exponent > p2->n[j].exponent){
sum->n[count] = p2->n[j];
++j;
}
++count;
}
if(i < p1->numOfNode){
while(i < p1->numOfNode){
sum->n[count++] = p1->n[i++];
}
}
if(j < p2->numOfNode){
while(j < p2->numOfNode){
sum->n[count++] = p2->n[j++];
}
}
}
void PrintPolynomial(Polynomial* p){
for(int i = 0; i < p->numOfNode; i++)
if(p->n[i].coefficient) //系数为0 的项不输出
printf("系数:%d\t指数:%d\n",p->n[i].coefficient, p->n[i].exponent);
printf("\n");
}
输入:
4 5
(1,1)(2,2)(3,3)(4,4)
(5,1)(2,7)(3,8)(4,100)(5,1000)
结果: