2 条题解
-
3
差评,居然没有优先级可以采用计算后缀表达式的方法。但样例是中缀,所以我们可以建立两个栈:运算符栈和操作数栈。现将运算符和操作数入栈,等最后再用计算后缀表达式的方法计算。
可是我们发现,如果用栈,计算顺序将会变成从右往左。而我们应该从左往右,所以我们可以将运算符栈改为队列,将操作数栈改为双端队列。详见代码。
#include <bits/stdc++.h> using namespace std; deque<int> sta; queue<char> st; string s; int main(){ cin>>s; for (int i=0;i<s.size();i++){ if (isdigit(s[i])){ sta.push_back(s[i]-'0'); }else{ st.push(s[i]); } } while (!st.empty()){ int a=sta.front(); sta.pop_front(); int b=sta.front(); sta.pop_front(); if (st.front()=='+'){ sta.push_front(a+b); }else if (st.front()=='-'){ sta.push_front(a-b); }else{ sta.push_front(a*b); } st.pop(); } cout<<sta.back(); return 0; }
-
2
#include <iostream> #include <string> using namespace std; int main() { string a; int num = 0; getline(cin, a); /*for (int i = 3; i < a.size(); i++) { if (a[i] == '+') { num = a[i-1] + a[i + 1] - 48; a[i + 1] = num; } if (a[i] == '-') { num = a[i-1] - a[i + 1]; a[i + 1] = num; } if (a[i] == '*') { num = (a[i-1]-48) * (a[i + 1] - 48); a[i + 1] = num; } }*///这是我最开始的思路,但是是错的,原因就在下面,供大家参考一下 if (a[1] == '+')//在这里把a[0],a[2]单拎出来,这样可以得到第一个int值,从而方便后面的加减乘 //如果将算出的数重新放回string里面的话一旦num值为两位数那么在string就要用 //两个位置来存放,达不到我们进行计算的目的 { num = a[0] + a[2] - 96; } if (a[1] == '-') { num = a[0] - a[2]; } if (a[1] == '*') { num = (a[0] - 48) * (a[2] - 48); } for (int i = 3; i < a.size(); i++) { if (a[i] == '+') { num = num + a[i + 1] - 48; } if (a[i] == '-') { num = num - a[i + 1] + 48; } if (a[i] == '*') { num = num * (a[i + 1] - 48); } } cout << num; return 0; }
- 1
信息
- ID
- 122
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 1
- 标签
- 递交数
- 53
- 已通过
- 43
- 上传者