VJ_有未知数的表达式_递归

用户输入一个字符串,形如 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;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/125135795
今日推荐