|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 柿子饼同学 于 2022-8-23 07:48 编辑
求助 , 不管怎么搞答案还是不对, 附上题目和我写的代码 ( 求解 )
如果您写出正确的代码 , 请带详解
输入输出 :- 5
- 1 2 3 4 5
- (R1-(R2|R3)-R4-R5)
复制代码- #include <bits/stdc++.h>
- using namespace std;
- string s; // 输入没有空格
- stack<double> num; // 数字栈
- stack<char> op; // 运算符栈
- double dict[205]; // 存放标号为 i 的值
- int n;
- int main(){
- ios::sync_with_stdio(0);
- cin.tie(0); cout.tie(0);
-
- cin >> n;
- for(int i = 1; i <= n; i++) cin >> dict[i];
- cin >> s;
- int i = 0, len = s.size();
- while(i < len){
- if(s[i] == 'R'){
- i++;
- int nm = 0;
- while(isdigit(s[i])){
- nm = nm * 10 + s[i] - '0';
- i++;
- }
- num.push(dict[nm]); // 这里把下标求出, 推入他的值
- }
- else{
- if(s[i] == '(') op.push(s[i]);
- else if(s[i] == ')'){
- auto c = op.top(); op.pop();
- while(c != '('){
- auto a = num.top(); num.pop();
- auto b = num.top(); num.pop();
- if(c == '|') num.push(a*b/(a+b));
- if(c == '-') num.push(a+b);
- c = op.top(); op.pop();
- }
- }
- else op.push(s[i]);
- i++;
- }
- }
- cout << num.top() << endl;
-
- return 0;
- }
复制代码 |
|