用户输入一个字符串,形如 51+3x-4x^2+x^4的多项式.设x=3,编写程序,计算多项式的值。说明:
1)x的系数是整数,系数为1时,省略不写(见例子中的第4项)。
2)运算符只有+,-;
2)整个字符串不包含空格,多项式中的字母x皆为小写;
3)指数为0时,x省略(见例子第1项),前一项的指数小于后一项的指数,每一项的指数不重复,相邻的两项的指数有可能不连续(见例子中第3项和第4项)。
4)假设不会溢出。
5) 指数和系数都可能是多位
Input
若干个多项式表达式.字符串,不超过30位.
Output
多项式的值.int型数值
Sample
Inputcopy | Outputcopy |
---|---|
2+x+3x^2 51+3x-4x^2+x^4 |
32 105 |
Hint
可以使用数学函数pow来求x的n次方.
//
#include<bits/stdc++.h>
using namespace std;
const int N=111;
char s[N];
int f( int x,int y )
{
int i;
for( i=y;i>=x;i-- ) // 分解 +-
{
if( s[i]=='+' ) return f( x,i-1 )+f( i+1,y );
else if( s[i]=='-' ) return f( x,i-1 )-f( i+1,y );
}
int a=0;
for( i=x;i<=y;i++ ) // 分解系数
{
if( isdigit( s[i] )==0 )
{
if( i==x ) break;
else return a*f( i,y ); // 分解 系数和x
} // not i+1
a=a*10+s[i]-'0';
if( i==y ) return a; // 特判 独立系数和指数
}
for( i=y;i>=x;i-- ) // 分解 ^
if( s[i]=='^' )
return pow( f( x,i-1 ),f( i+1,y ) );
// x==3 // 指数也是独立的
return x==y?3:0;
}
int main()
{
while( cin>>s )
{
cout<<f( 0,strlen(s)-1 )<<endl;
}
return 0;
}