描述:求一个多项式的值
可以利用递归的形式,首先将一个多项式分成三个基本的部分,表达式=项1+-项2+-项3+-....项n,项=因子1*/因子2*/因子3...因子n,因子=(表达式)或者数字;
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
double term_value();//xiang
double factor_value();//yinzi
double expression_value();//biaodashi
int main()
{
cout<<expression_value()<<endl;
return 0;
}
double expression_value()
{
double result=term_value();
bool more;//多项式,more表示以后是不是还有项
more=true;
double value;
while(more)
{
char c;
c=cin.peek();//用peek函数,进行查看而不是取出来,以防有(),这是重点
if(c=='+'||c=='-')
{
cin.get();
value=term_value();
if(c=='+')
result+=value;
else
result-=value;
}
else
more=false;
}
return result;
}
double factor_value()
{
double result=0;
char c;
c=cin.peek();
if(c=='(')
{
cin.get();
result=expression_value();
cin.get();
}
else
{
while(isdigit(c)).//isdigit函数的作用是判断字符是不是一个数字字符
{
result=result*10+c-'0';
cin.get();//
c=cin.peek();//这两部也是必须的,不能用c=cin.get()代替,下文会展开
}
}
return result;
}
double term_value()
{
double result;
double value;
bool more=true;
result=factor_value();
while(more)
{
char c;
c=cin.peek();
if(c=='/'||c=='*')
{
cin.get();
value=factor_value();
if(c=='/')
result/=value;
else
result*=value;
}
else
more=false;
}
return result;
}
关于因子中c.get(),c.peek()不能太用c.get()代替的原因,因为以后递归的代码也需要使用c.peek来查看字符,cin.get函数是有返回值的,如果用c=cin.get的话字符储存在c中,如果只是一个c.get,字符储存在函数中,以后可以查看,毕竟输入只有一次