华为面试题:一元多项式的化简 C语言实现源码

原创 2015年03月04日 09:12:25

编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式。
说明:
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 256

int 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语言)

最近在读 Numerical Recipes in C++ ,上面给了些多项式求值的算法,很实用。放在这里备用。三个函数,分别是多项式求值,多项式求导数值,多项式求各阶导数值。下面的代码全都简单验算过...
  • liyuanbhu
  • liyuanbhu
  • 2017年03月12日 22:10
  • 2403

一元多项式相加(C语言实现)

poly.h#ifndef _POLY_H_ #define _POLY_H_#include #include #include//结点结构 typedef struct Polynode { ...
  • ColdCoding
  • ColdCoding
  • 2016年01月18日 15:01
  • 5517

多项式的加减法以及乘法的C语言实现

#include #include "polyn.h" void main() { Node *polyn1; Node head1; Node *polyn2; Node head2; ...
  • meiyubaihe
  • meiyubaihe
  • 2014年05月25日 16:30
  • 3358

一元多项式化简

背景: 编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式。   说明:  l 多项式由若干个单项式组成,单项式之间为加、减(+,-)关系。 l ...
  • sxh850297968
  • sxh850297968
  • 2015年07月07日 19:22
  • 1678

[华为机试练习题]71.一元多项式化简

题目背景:编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式。 说明: 多项式由若干个单项式组成,单项式之间为加、减(+,-)关系。 单项式指数字与字母幂...
  • SunnyYoona
  • SunnyYoona
  • 2015年07月07日 16:48
  • 2436

一元多项式加减乘除运算-C语言实现

根据同学的要求,对该程序作了点修改。/** 文件: main.c* ------------* 功能:一元多项式的运算(加,减,乘,除)* 版本: 1.1* 日期 2008-05-16*/#inclu...
  • shenshaohong0832
  • shenshaohong0832
  • 2010年01月24日 22:44
  • 2095

一元多项式相加程序(C语言)

/*   2007-3-22   一元多项式的加法*/ # include # include # include typedef struct  PolyNode{  int  coef;  int...
  • pfgmylove
  • pfgmylove
  • 2008年11月07日 13:34
  • 10174

数据结构(c语言)一元多项式的表示相加级实现

  • 2014年10月24日 12:23
  • 3KB
  • 下载

C语言:用链表实现一元多项式的加法

/* 一元多多项式的加法 1.先创建链表,存储多项式 2.输出多项式 3.两个多项式相加 4.输出多项式 */ # include # include typedef struct ...
  • wjb214149306
  • wjb214149306
  • 2015年08月01日 17:05
  • 4626

华为经典C语言面试题(一)

1、找错   void test1() {     char string[10];     char* str1="0123456789";     strcpy(...
  • ky_heart
  • ky_heart
  • 2017年01月02日 20:44
  • 2057
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:华为面试题:一元多项式的化简 C语言实现源码
举报原因:
原因补充:

(最多只允许输入30个字)