华为面试题:一元多项式的化简 C语言实现源码
来源:互联网 发布:手机数据包解压软件 编辑:程序博客网 时间:2024/06/11 08:59
编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式。
说明:
1.多项式由若干个单项式组成,单项式之间为加、减(+,-)关系。
2.单项式指数字与字母幂的乘积构成的代数式。对一元多项式,字母只有一种。
3.同类项合并指将多项式中指数相同的单项式,系数经过加减求和,合并为一个单项式。按指数降序指多项式中,单项式按指数从大到小顺序
相连。
格式说明
一元多项式输入输出时以字符串形式表示,格式如下
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+3X^3+1X^0"
输出:
"5X^6-7X^4+1X^0"
<=单项式指数<=3000<>
<单项式系数<=1000<>
输入:-7X^5+7X^3+1X^2-7X^3+2X^5
输出:-5X^5+1X^2(要求从高次到低次排序)
#include "string.h"#include "stdio.h"#include "stdlib.h"#define MAX_PATH 256int store[1024] = {0};int num = 0;void getStringBeforeString(char *out,char *in,char *subFlag){ char *t = strstr(in,subFlag); if(t!=NULL) { memcpy(out,in,t-in); } else { memset(out,0,1); }}char *getUnit(char *out,char *in,int *pn){ char *position = NULL; char tmp1[1024] = {0}; char tmp2[1024] = {0}; getStringBeforeString(tmp1,in,"+"); getStringBeforeString(tmp2,in,"-"); if (strlen(tmp1)==0 && strlen(tmp2)==0) { memset(out,0,1); return in; } if (strlen(tmp1)<strlen(tmp2)) { if (strlen(tmp1)!=0) { memcpy(out,tmp1,strlen(tmp1)+1); *pn = 1;//正数 position = in+(strstr(in,"+")-in)+1; } else { memcpy(out,tmp2,strlen(tmp2)+1); *pn = 0;//负数 position = in+(strstr(in,"-")-in)+1; } } else { if(strlen(tmp2)!=0) { memcpy(out,tmp2,strlen(tmp2)+1); *pn = 0;//负数 position = in+(strstr(in,"-")-in)+1; } else { memcpy(out,tmp1,strlen(tmp1)+1); *pn = 1;//正数 position = in+(strstr(in,"+")-in)+1; } } return position;}//准备工作:存入数据,处理数据(矩阵运算:行的元素和列的元素对应积的和),输出int main(){ //输入: // "-7X^4+5X^6-3X^3+3X^3+1X^0" //输出: //"5X^6-7X^4+1X^0" char buffer[1024] = {0}; char out[1024] = {0}; gets(buffer); int pn = 1,pn_next = 1;//记录正负,1为正数 char *position = buffer; //单独处理第一个 if (*position=='-') { pn_next = 0; pn = pn_next; position = position+1; } while(true) { memset(out,0,1024); position = getUnit(out,position,&pn_next); if (strlen(out)==0) { //处理最后一组 char *a = strtok(position,"X^"); char *b = strtok(NULL,"X^"); if (pn==1) { store[atoi(b)] += atoi(a); } else { store[atoi(b)] -= atoi(a); } break; } char *a = strtok(out,"X^"); char *b = strtok(NULL,"X^"); if (pn==1) { store[atoi(b)] += atoi(a); } else { store[atoi(b)] -= atoi(a); } pn = pn_next; } int headFlag = 0; for (int i=1023;i>=0;i--) { int t = store[i]; if (t!=0) { if (t>0) { if (headFlag==1) { printf("+"); } } printf("%dX^%d",t,i); headFlag = 1; } } //store[num++] = atoi(out); return 0;}
- 华为面试题:一元多项式的化简 C语言实现源码
- 华为面试题:四则运算 C语言源码
- C语言实现一元多项式的加减运算
- C语言:用链表实现一元多项式的加法
- 一元多项式的乘法运算(C语言)实现
- 一元多项式相加(C语言实现)
- 华为的一道C语言面试题
- c语言一元多项式的相加
- 华为面试题:扑克牌大小 C语言源码
- 华为面试题:迷宫问题 C语言源码
- 华为C语言面试题
- 华为C语言面试题
- 华为C语言面试题
- 华为C语言面试题
- 华为C语言面试题
- 华为面试题:识别有效的ip地址和子网掩码并分类 C语言源码
- 华为面试题:开放的书名检索库 c语言源码
- 一元多项式的实现
- Android Scroller的滚动实现原理
- 02storm聚类尝试kmeans
- @property和@synthesize可以自动生成某个类成员变量的存取方法
- Java基础之集合类
- 等待已久,她终于来了!
- 华为面试题:一元多项式的化简 C语言实现源码
- eatcms网站订餐手机微信等功能亮相
- 如何提高网站在百度搜索的排名
- opencv基本数据结构
- 挑战GCJ的题目: crazy row
- 程序员解决问题的60个策略
- Android 使用Scroller实现ListView左右滑动删除Item效果
- HDU-Friends
- 泛函分析学起来