关键在于取出字符串中的数字
代码如下:
#include
#include <stdio.h>
using namespace std;
#define MAXSIZE 100
typedef int Status;
typedef struct LNode{
int x, m; //幂和系数; struct LNode next; int length;} LNode, Linklist;int main(){ int i = 0, j = 0, s, t; int flag; char m[1000], n[1000]; Linklist p,L, q, T; L = new LNode; T = new LNode; L->next = NULL; T->next = NULL; q = L; gets(m); gets(n); /--------m[i]的取系数和取幂数--------/ while (m[i] != ‘\0’) //到底为止; { s = 0; t = 0; Linklist p; p = new LNode; p->next=NULL; if (i == 0) { s = 0; t = 0; if (m[i] == ‘-’) { i = i + 1; while (m[i] != ‘+’ && m[i] != ‘x’&&m[i]!=’-’) { s = s * 10 + (m[i] - ‘0’); i++; } p->x = -s; // cout << p->x; //注意删掉 p->next = NULL; L->next = p; q = p; } else //m[i]!=’-’ { //求第一项的系数; while (m[i] != ‘+’ && m[i] != ‘x’&&m[i]!=’-’) { s = s * 10 + (m[i] - ‘0’); i++; } p->x = s; //cout << p->x; //注意删掉 p->next = NULL; L->next = p; q = p; } } else if (i != 0) { flag=0; //cout<<i; s = 0; t = 0; if(m[i]’+’){flag=1;} else flag=0; i = i + 1; //+后必然是数字; if(m[i]‘x’) { if(flag)p->x=1; else p->x=-1; } else { while (m[i] != ‘x’) { s = s * 10 + (m[i] - ‘0’); i++; } if(flag) p->x = s; else p->x=-s; } //cout << p->x; p->next = NULL; q->next = p; q = p; } if (m[i] == ‘+’||m[i]’-’) { p->m = 0; } else if (m[i] == ‘x’) { if (m[i + 1] == ‘+’||m[i+1]’-’) //考虑x的时候 { i = i + 1; //两种情况的i最后输出相同; p->m = 1; } else if (m[i + 1] == ‘^’) { i = i + 2; while (m[i] != ‘+’ && m[i] != ‘\0’&&m[i]!=’-’) { t = t * 10 + (m[i] - ‘0’); i++; } p->m = t; } } }
/--------m[i]的取系数和取幂数--------/
/--------n[i]的取系数和取幂数--------/ i=0;j=0;flag=0; q=T; while (n[i] != ‘\0’) //到底为止; { s = 0; t = 0; Linklist p; p = new LNode; p->next=NULL; if (i == 0) { s = 0; t = 0; if (n[i] == ‘-’) { i = i + 1; while (n[i] != ‘+’ && n[i] != ‘x’&&n[i]!=’-’) { s = s * 10 + (n[i] - ‘0’); i++; } p->x = -s; // cout << p->x; //注意删掉 p->next = NULL; T->next = p; q = p; } else //n[i]!=’-’ { //求第一项的系数; while (n[i] != ‘+’ && n[i] != ‘x’&&n[i]!=’-’) { s = s * 10 + (n[i] - ‘0’); i++; } p->x = s; //cout << p->x; //注意删掉 p->next = NULL; T->next = p; q = p; } } else if (i != 0) { flag=0; //cout<<i; s = 0; t = 0; if(n[i]’+’){flag=1;} else flag=0; i = i + 1; //+后必然是数字; if(n[i]‘x’) { if(flag) p->x=1; else p->x=-1; } while (n[i] != ‘x’) { s = s * 10 + (n[i] - ‘0’); i++; } if(flag) p->x = s; else p->x=-s; //cout << p->x; p->next = NULL; q->next = p; q = p; } //求第一项的幂数;0/1/其他项情况显然在它其中(非0正整数); if (n[i] == ‘+’||n[i]’-’) { p->m = 0; } else if (n[i] == ‘x’) { if (n[i + 1] == ‘+’||n[i+1]’-’) //考虑x的时候 { i = i + 1; //两种情况的i最后输出相同; p->m = 1; } else if (n[i + 1] == ‘^’) { i = i + 2; while (n[i] != ‘+’ && n[i] != ‘\0’&&n[i]!=’-’) { t = t * 10 + (n[i] - ‘0’); i++; } p->m = t; } } }
/-----------实现多项式的相加-------/
Linklist S,k;//和多项式
S=new LNode;
S->next=NULL;
k=S;
p=L->next;
q=T->next;
while(p!=NULL&&q!=NULL)
{
Linklist r;
r=new LNode;
r->next=NULL;
if(p->m==q->m)
{
if((p->x)+(q->x)!=0)
{
r->x=p->x+q->x;
r->m=p->m;
k->next=r;
k=r;
}
p=p->next;
q=q->next;
}
else if(p->mm)
{
r->x=p->x;
r->m=p->m;
k->next=r;
k=r;
p=p->next;
}
else if(p->m>q->m)
{
r->x=q->x;
r->m=q->m;
k->next=r;
k=r;
q=q->next;
}
}
k->next=p?p:q;
/*----相加结束打印结果--------*/
for(q=S->next;q;q=q->next)
{
/*---打印系数----*/
if(q==S->next)
{
if(q->x!=1||q->m!=-1)cout<<q->x;
if(q->x==-1)cout<<"-";
}
else
{
if(q->x>0&&q->x!=1&&q->x!=-1)
cout<<"+"<<q->x;
if(q->x==1)
cout<<"+";
if(q->x==-1)
cout<<"-";
if(q->x<0&&q->x!=-1)
{
cout<<q->x;
}
}
if(q->m!=0)
{
if(q->m==1)
cout<<"x";
else
{
cout<<"x^"<<q->m;
}
}
}
cout<<endl;
p=S->next;
q=S;
q=NULL;
while(p)
{
S=p;
p=p->next;
S->next=q;
q=S;
}
for(q=S;q;q=q->next)
{
/*---打印系数----*/
if(q==S)
{
if(q->x!=1||q->m!=-1)cout<<q->x;
if(q->x==-1)cout<<"-";
}
else
{
if(q->x>0&&q->x!=1&&q->x!=-1)
cout<<"+"<<q->x;
if(q->x==1&&q->m!=0)
cout<<"+";//首项无需考虑;
if(q->x==1&&q->m==0)//正序不用考虑的
cout<<"+"<<1;
if(q->x==-1)
cout<<"-";
if(q->x==-1&&q->m==0)
cout<<"-"<<1;
if(q->x<0&&q->x!=-1)
{
cout<<q->x;
}
}
if(q->m!=0)
{
if(q->m==1)
cout<<"x";
else
{
cout<<"x^"<<q->m;
}
}
}
cout<<endl;
}
/自创测试数据:-3-x-9x2-10x3
4+2x-3x2-12x3/