试题 算法训练 二元函数
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
令二元函数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<cstdio> #include<stack> #include<string> #include<iostream> using namespace std; int main(void) { int a, b; stack<int> st; string s; cin >> a >> b; cin >> s; for (int i = 0; i < s.size(); i++) { int num = 0; int flag = 1; if (s[i] >= '0' && s[i] <= '9' || s[i] == '-') { while (s[i] >= '0' && s[i] <= '9' || s[i] == '-') { if (s[i] == '-') { i++; flag = -1; } num = num * 10 + s[i] - '0'; i++; } st.push(num*flag); } if (s[i] == ')') { int num1 = st.top(); st.pop(); int num2 = st.top(); st.pop(); st.push(num2*a + num1 * b); } } printf("%d", st.top()); return 0; }