一元多项式化简
来源:互联网 发布:网络连接没有本地连接 编辑:程序博客网 时间: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
- 一元多项式化简
- 一元多项式化简
- 一元多项式化简
- [华为机试练习题]71.一元多项式化简
- 一元多项式
- 一元多项式
- 一元多项式
- 一元多项式
- 华为面试题:一元多项式的化简 C语言实现源码
- 一元稀疏多项式计算器
- 一元稀疏多项式
- 一元多项式加法
- 一元多项式的实现
- 一元多项式相加
- 一元多项式运算
- 数据结构 一元多项式相加
- 一元多项式的运算
- 一元多项式的幂
- EasyUI Datebox 日期框
- oc的省市区放进一个数组
- Android开发-关于Activity启动模式
- Android内存优化之——static使用篇
- Unity3D组件手册-Box Collider
- 一元多项式化简
- mongodb的一个小坑
- 关于easyUI在子页面增加显示tabs的一个问题
- x86_64系统 yum安装i386包
- python urllib 和urllib2的区别
- Java 9中新的货币API
- 《剑指offer》——任意两个整数相加(乘)
- Xcode升级后,遇到的告警和解决方法
- SQL Server完全删除问题