一元多项式化简

来源:互联网 发布:网络连接没有本地连接 编辑:程序博客网 时间:2024/05/23 02:03

描述: 

背景:

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

 

说明: 

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/9Last Modified :Description   :Function List :History       :1.Date        : 2010/9Author      :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;}



0 0
原创粉丝点击