问题描述
令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值。
只有满足以下要求的表达式才是合法的:
1.任意整数x是一个合法的表达式;
2.如果A和B都是合法的表达式,则f(A,B)也是一个合法的表达式。
注意:字符串S有可能为空。
#include <iostream>
#include <cctype>
#include <stack>
using namespace std;
int a, b;
string s;
int f(int x,int y){
return a*x+b*y;
}
int getNumber(int &i, bool minus){
int num = 0;
for( ; isdigit(s[i]); i++)
num = num*10+s[i]-'0';
if(minus) num = -num;
return num;
}
int main(int argc, char** argv) {
cin>> a>> b>> s;
stack<int> num;
num.push(0); //先放入0,防止s为空的情况。
for(int i = 0; i < s.length(); i++){
if(s[i] == '-' ){
i++;
num.push( getNumber(i, true));
}else if(isdigit(s[i])){
num.push( getNumber(i, false));
}
if(s[i] == ')'){
int y =num.top(); num.pop();
int x = num.top(); num.pop();
num.push(f(x,y));
}
}
cout<< num.top() << '\n';
return 0;
}
输入格式
第一行两个数a和b;
第二行一个字符串S表示要求的表达式。
输出格式
一行一个数表示表达式S的值。
样例输入
1 2
f(1,f(1,-1))
样例输出
-1
数据规模和约定
S的长度不超过50,运算过程中所有变量不会超出int的范围。