从一行输入的字符串里,读取其中的单项式,并按照要求的格式输出(输出时,每行一个)。单项式的基本格式为:
系数x^幂指数
例如:
5x^2 表示5倍的 x 平方
3x^-4 表示3倍的 x 的 -4 次方
输入要求
1)当省略系数,则表示系数为 1。例如:x^3
2)当系数省略为减号时,则表示系数为 -1。例如:-x^3
3)当省略幂指数时,则表示幂指数为1。例如:-5x。
4)对于常数项,可以省略x^0,例如:-2 表示 -2x^0
5)输入时,一个单项式内部【不允许】有空白字符(空格或\t)。例如:2 x^ 3
输出要求
1)如果幂指数为0,则简化为常数项。例如:-3 x ^ 0 应该输出为 -3
2)如果幂指数为 1,则须省略它。例如:-3x^1 应该输出为-3x
3)如果系数为1或-1,则输出时须省略1。例如:-x^6,x^2
4)输出时,单项式内部不能有空白字符(空格或\t)
函数接口定义:
----------------------------------------------------------------------------------------
函数 InputMonomial - 读入字符串中的第一个单项式
char* InputMonomial(char *s, PolynomialNode *p );
参数
s - 字符串指针,从中读取数据
p - 单项式结构指针,保存读取结果
返回值是一个字符串指针
成功 - 指向字符串 s 中未被处理的第一个字符(包括\0)
失败 - NULL
----------------------------------------------------------------------------------------
函数 OutputMonomial - 以精简格式输出单项式(系数为coef,幂指数为expo)
void OutputMonomial(int coef, int expo);
参数
coef - 单项式的系数
expo - 单项式的幂指数
返回值
无
----------------------------------------------------------------------------------------
裁判测试程序样例:
#include <stdio.h>
#define MAXLINE 1024
typedef struct PolynomialStruct{
int coef; // 系数
int expo; // 幂次
struct PolynomialStruct * next;
} PolynomialNode;
//判断字符串 s 的起始字符是否为:x^ 或 X^
int IsEXP(char *s)
{
return ( (s[0]=='x' || s[0]=='X') && s[1]=='^');
}
//字符是否为\n或\0
int IsEndingChar(char ch)
{
return (ch==0 || ch=='\n');
}
//跳过字符串起始部分的空格和制表符
//返回值:一个指针
// 指向字符串前面的第一个非空白字符
char * SkipSpaceChars(char *s)
{
while( *s==' ' || *s=='\t' )
s++;
return s;
}
char* InputMonomial(char *s, PolynomialNode *p );
void OutputMonomial(int coef, int expo);
int main()
{
char linebuffer[MAXLINE], *p;
PolynomialNode node;
p = fgets(linebuffer, sizeof(linebuffer), stdin);
while( p = InputMonomial(p, &node) ) {
OutputMonomial(node.coef, node.expo);
printf("\n");
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
-3x^-6 x^5 3x 1 3x^0 -1x x^0
输出样例:
对应上面的每一行输入,输出结果分别是:
-3x^-6
x^5
3x
1
3
-x
1