社区讨论
Subtask 0 全对,Subtask 1 WA,也不知道哪里错了
P1175表达式的转换参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @m0jjjrjr
- 此快照首次捕获于
- 2024/09/01 20:21 2 年前
- 此快照最后确认于
- 2025/11/04 21:52 4 个月前
CPP
#include <iostream>
#include <stack>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
#define int long long
int check(char c)//判断优先级
{
switch(c)
{
case '+':return 1;
case '-':return 1;
case '*':return 2;
case '/':return 2;
case '^':return 3;
default:return -1;//程序不会执行这句,保险起见要加上
}
}
stack<char> a;
vector<char> b;
vector<int> t;
main()
{
string s;
getline(cin,s);
int tmp = s.size()-1;
//一.转后缀
for(auto c:s)
{
if(c >= '0' && c <= '9')
b.push_back(c);
if(check(c) >= 1 && check(c) <= 3)//c == '+' || c == '-' || c == '*' || c == '/' || c == '^'
{
if(!a.empty())
{
while(!a.empty() && check(c) <= check(a.top()))
{
if(check(c) == check(a.top()) && check(c) == 3)break;//在c与栈顶都是^号时也能进栈
b.push_back(a.top());
a.pop();
}
}
a.push(c);
}
if(c == '(')
a.push(c);
if(c == ')')
{
while(a.top() != '(')
{
b.push_back(a.top());
a.pop();
}
a.pop();
}
if(c == s[tmp])
{
while(!a.empty())
{
b.push_back(a.top());
a.pop();
}
}
}
//二.输出后缀
for(int i = 0;i < b.size();i++)
{
cout << b[i] << ' ';
}
cout << endl;
//三.输出过程
int x,y,z;
int ans;
for(int i = 0;i < b.size();i++)
{
if(b[i] >= '0' && b[i] <= '9')
{
ans = b[i]-'0';
t.push_back(ans);
}
if(b[i] == '+')
{
x = t.back();
t.pop_back();
y = t.back();
t.pop_back();
z = x+y;
t.push_back(z);
for(int j = 0;j < t.size() ; j++)
{
cout << t[j] << ' ';
}
for(int j = i+1;j < b.size() ; j++)
{
cout << b[j] << ' ';
}
cout << endl;
}
if(b[i] == '-')
{
x = t.back();
t.pop_back();
y = t.back();
t.pop_back();
z = y-x;
t.push_back(z);
for(int j = 0;j < t.size() ; j++)
{
cout << t[j] << ' ';
}
for(int j = i+1;j < b.size() ; j++)
{
cout << b[j] << ' ';
}
cout << endl;
}
if(b[i] == '*')
{
x = t.back();
t.pop_back();
y = t.back();
t.pop_back();
z = x*y;
t.push_back(z);
for(int j = 0;j < t.size() ; j++)
{
cout << t[j] << ' ';
}
for(int j = i+1;j < b.size() ; j++)
{
cout << b[j] << ' ';
}
cout << endl;
}
if(b[i] == '/')
{
x = t.back();
t.pop_back();
y = t.back();
t.pop_back();
z = y/x;
t.push_back(z);
for(int j = 0;j < t.size() ; j++)
{
cout << t[j] << ' ';
}
for(int j = i+1;j < b.size() ; j++)
{
cout << b[j] << ' ';
}
cout << endl;
}
if(b[i] == '^')
{
x = t.back();
t.pop_back();
y = t.back();
t.pop_back();
z = pow(y,x);
t.push_back(z);
for(int j = 0;j < t.size() ; j++)
{
cout << t[j] << ' ';
}
for(int j = i+1;j < b.size() ; j++)
{
cout << b[j] << ' ';
}
cout << endl;
}
}
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...