问题描述
令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值。
只有满足以下要求的表达式才是合法的:
1.任意整数x是一个合法的表达式;
2.如果A和B都是合法的表达式,则f(A,B)也是一个合法的表达式。
输入格式
第一行两个数a和b;
第二行一个字符串S表示要求的表达式。
输出格式
一行一个数表示表达式S的值。
样例输入
1 2
f(1,f(1,-1))
样例输出
-1
数据规模和约定
S的长度不超过50,运算过程中所有变量不会超出int的范围。
#include<stdio.h>
#include<iostream>
#include<stack>
#include<cctype>
using namespace std;
int a,b;
string s;
int f(int x,int y){
return a*x+b*y;
}
int getNumber(int &i,bool m){//读取数字
int num=0;
for(;isdigit(s[i]);i++){//从高位开始
num=num*10+s[i]-'0';
}
if(m){
num=-num;//负数
}
return num;
}
int main(){
cin>>a>>b>>s;
stack<int> num;
num.push(0);//防止空串
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;
}
这里用到了一些数据结构中栈的知识,祝大家在比赛中获得好成绩