社区讨论
60求调
P10473表达式计算4参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m5hp8bm0
- 此快照首次捕获于
- 2025/01/04 12:43 去年
- 此快照最后确认于
- 2025/11/04 12:00 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int number[10001];
char symbol[10001];
string s,t;
int i,p;
void push(){
p++;
symbol[p]=s[i];
}
void pop(){
p--;
switch(symbol[p+1]){
case '+': number[p]+=number[p+1]; break;
case '-': number[p]-=number[p+1]; break;
case '*': number[p]*=number[p+1]; break;
case '/': number[p]/=number[p+1]; break;
case '^': number[p]=pow(number[p],number[p+1]); break;
}
}
bool can(){
if((s[i]=='+'||s[i]=='-')&&(symbol[p]!='(')){
return true;
}else if((s[i]=='*'||s[i]=='/')&&(symbol[p]=='^'||symbol[p]=='*'||symbol[p]=='/')){
return true;
}else if(s[i]=='^'&&symbol[p]=='^'){
return true;
}else{
return false;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>s;
s="("+s+")";
i=0;p=0;
while(i<s.size()){
while(s[i]=='('){
push();
i++;
}
if(s[i]>='0'&&s[i]<='9'){
int j=i;
do{
i++;
}while(s[i]>='0'&&s[i]<='9');
t=s.substr(j,i-j);
sscanf(t.c_str(),"%d",&number[p]);
}
if(s[i]==')'){
while(symbol[p]!='('){
pop();
}
p--;
number[p]=number[p+1];
}else{
while(can()){
pop();
}
push();
}
i++;
}
cout<<number[0];
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...