社区讨论

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 条回复,欢迎继续交流。

正在加载回复...