您的位置:首页 > 其它

一元多项式化简

2015-12-23 19:26 218 查看
描述: 背景:

编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式。

 

说明: 
l 多项式由若干个单项式组成,单项式之间为加、减(+,-)关系。
l 单项式指数字与字母幂的乘积构成的代数式。对一元多项式,字母只有一种。
l 同类项合并指将多项式中指数相同的单项式,系数经过加减求和,合并为一个单项式。按指数降序指多项式中,单项式按指数从大到小顺序相连。

 
格式说明

一元多项式输入输出时以字符串形式表示,格式如下

l单项式之间用单个加减运算符相连,运算符:+,- 
2单项式由系数、字母、指数标识符、指数依次直接相连组成,各部分均不能省略。
    系数:只由若干0到9数字字符组成(系数不等于0,且不以0开头) 
    字母:X
    指数标识符:^
    指数:只由若干0到9数字字符组成(指数可等于0,不等于0时不以0开头) 
3其他约定
    输入不为空串,输出若为0则以空串表示 
    字符串中除以上字符,不包含空格等其他字符,字符串尾部以’\0’结束
    多项式中第一个单项式前加运算时省略+符号,减运算时有-符号 

注意:输入多项式符合上述格式,无需检查;输出多项式格式由考生程序保证

 

规格

输入多项式满足如下规格,考生程序无需检查: 
–0<单项式系数<=1000<> 
–0<=单项式指数<=3000<> 
–单项式个数不限制,但同类项合并处理后,单项式的系数小于65535。

 

示例

例一

输入:

 "7X^4-5X^6+3X^3" 

输出:

 "-5X^6+7X^4+3X^3"

例二

输入:

 "-7X^4+5X^6-3X^3+3X^3+1X^0" 

输出:

 "5X^6-7X^4+1X^0"

代码:

/******************************************************************************

Copyright (C), 2001-2011, Huawei Tech. Co., Ltd.

******************************************************************************
File Name :
Version :
Author :
Created : 2010/9
Last Modified :
Description :
Function List :

History :
1.Date : 2010/9
Author :
Modification: Created file

******************************************************************************/
#include <string.h>
#include <stdio.h>

/******************************************************************************************************
Description : 对输入的一元多项式,进行同类项合并,输出处理后的一元多项式
Prototype : void OrderPolynomial (char* InputString, char* OutputString)
Input Param : char* InputString 输入多项式字符串
Output Param : char* OutputString 输出多项式字符串
Return Value : void

********************************************************************************************************/
void zhuanhua (int* a, char* OutputString,int n)
{
int i=1;
int j;
char b[10];
int num=0;
if(a[0]==0)
i=2;
else
{
if(a[0]<0)
{
OutputString[0]='-';
a[0]=-1*a[0];
++num;
}
sprintf(b,"%d",a[0]);
for(j=0;b[j]!='\0';++j)
{
OutputString[num]=b[j];
++num;
}
OutputString[num]='X';
++num;
OutputString[num]='^';
++num;
}
while((i<=n))
{
if((a[i]==0)&&(i%2==0))
{
i=i+2;
continue;
}
if((i+1)<=n)
if((a[i+1]==-1)&&((i+1)%2==1))
break;
if(i%2==1)
{
sprintf(b,"%d",a[i]);
for(j=0;b[j]!='\0';++j)
{
OutputString[num]=b[j];
++num;
}
}
if(i%2==0)
{
if(a[i]<0)
{
OutputString[num]='-';
a[i]=-1*a[i];
++num;
}
else
{
OutputString[num]='+';
++num;
}
sprintf(b,"%d",a[i]);
for(j=0;b[j]!='\0';++j)
{
OutputString[num]=b[j];
++num;
}
OutputString[num]='X';
++num;
OutputString[num]='^';
++num;
}
++i;
}
OutputString[num]='\0';
}
void OrderPolynomial (char* InputString, char* OutputString)
{
/*在这里实现功能*/
int a[40];
int i,j,b,flag;
int num=0;
for(i=0;i<40;++i)
{
a[i]=0;
}
if(InputString[0]=='-')
flag=-1;
else
{
a[0]=InputString[0]-'0';
flag=1;
}
for(i=1;InputString[i]!='\0';++i)
{
if((InputString[i]>='0')&&(InputString[i]<='9'))
{
a[num]=10*a[num]+InputString[i]-'0';
}
if(InputString[i]=='X')
{
a[num]=a[num]*flag;
++num;
}
if(InputString[i]=='-')
{
flag=-1;
++num;
}
if(InputString[i]=='+')
{
flag=1;
++num;
}
}

for(i=1;i<=num;i=i+2)
{
for(j=i+2;j<=num;j=j+2)
{
if(a[i]==a[j])
{
a[i-1]=a[i-1]+a[j-1];
a[j]=-1;
}
}
}
for(i=1;i<=num;i=i+2)
{
for(j=i+2;j<=num;j=j+2)
{
if(a[i]<a[j])
{
b=a[i];a[i]=a[j];a[j]=b;
b=a[i-1];a[i-1]=a[j-1];a[j-1]=b;
}
}
}
zhuanhua(a,OutputString,num);
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: