社区讨论
第9个点RE了,请大佬帮忙看看怎么回事
P1175表达式的转换参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lz0rrbo0
- 此快照首次捕获于
- 2024/07/25 12:24 2 年前
- 此快照最后确认于
- 2024/07/25 14:07 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
int c[128][128], a[110], l, b[110], bl;
string s;
stack <int> f;
stack <int> h;
int main(){
c['+']['+'] = 1; c['+']['-'] = 1; c['+']['*'] = 0; c['+']['/'] = 0; c['+']['^'] = 0;
c['-']['+'] = 1; c['-']['-'] = 1; c['-']['*'] = 0; c['-']['/'] = 0; c['-']['^'] = 0;
c['*']['+'] = 1; c['*']['-'] = 1; c['*']['*'] = 1; c['*']['/'] = 1; c['*']['^'] = 0;
c['/']['+'] = 1; c['/']['-'] = 1; c['/']['*'] = 1; c['/']['/'] = 1; c['/']['^'] = 0;
c['^']['+'] = 1; c['^']['-'] = 1; c['^']['*'] = 1; c['^']['/'] = 1; c['^']['^'] = 0;
cin >> s;
for(int i = 0; i < s.size(); i++){
if(s[i] >= '0' && s[i] <= '9'){
int w = s[i] - '0';
cout << w << " ";
h.push(w);
}
else if(s[i] == '('){
f.push(s[i]);
}
else if(s[i] == ')'){
while(f.top() != '('){
cout << (char) f.top() << " ";
h.push(f.top());
f.pop();
}
f.pop();
}
else{
while(!f.empty() && c[f.top()][s[i]] == 1){
cout << (char) f.top() << " ";
h.push(f.top());
f.pop();
}
f.push(s[i]);
}
}
while(!f.empty()){
cout << (char) f.top() << " ";
h.push(f.top());
f.pop();
}
while(!h.empty()){
f.push(h.top());
h.pop();
}
cout << endl;
while(!f.empty()){
if(f.top() >= '0' && f.top() <= '9'){
a[++l] = (int)(f.top() + 48);
}
else{
a[++l] = (int)(f.top());
}
f.pop();
}
//return 0;
while(1){
stack <int> ff;
memset(b, 0, sizeof(b));
bl = 0;
for(int i = 1; i <= l; i++){
if(a[i] == '+' || a[i] == '-' || a[i] == '*' || a[i] == '/' || a[i] == '^'){
int x = ff.top(); ff.pop();
int y = ff.top(); ff.pop();
if(a[i] == '+'){
ff.push(y + x);
}
else if(a[i] == '-'){
ff.push(y - x);
}
else if(a[i] == '*'){
ff.push(y * x);
}
else if(a[i] == '/') {
ff.push(y / x);
}
else{
ff.push(pow(y, x));
}
for(int j = 1; j <= i - 3; j++){
if(a[j] != '+' && a[j] != '-' && a[j] != '/' && a[j] != '*' && a[j] != '^'){
cout << a[j] << " ";
}
else{
cout << (char)a[j] << " ";
}
b[++bl] = a[j];
}
cout << ff.top() << " ";
b[++bl] = ff.top();
for(int j = i + 1; j <= l; j++){
if(a[j] != '+' && a[j] != '-' && a[j] != '/' && a[j] != '*' && a[j] != '^'){
cout << a[j] << " ";
}
else{
cout << (char)a[j] << " ";
}
b[++bl] = a[j];
}
cout << endl;
for(int j = 1; j <= bl; j++){
a[j] = b[j];
}
l = bl;
break;
}
else{
ff.push(a[i]);
}
}
if(bl == 1){
break;
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...