??? 又WA又100?玄关,求条
查看原帖
??? 又WA又100?玄关,求条
1342124
wangrongze楼主2025/7/23 17:29
#include<bits/stdc++.h>
using namespace std;
string s;
int num(int l, int r){
	int n = 0;
	for (int i = l ; i <= r; i++)
		n = n * 10 + s[i] - '0';
	return n;
}
int work(int l, int r){
	if(l > r) return 0;
	int p1 = -1, p2 = -1, p3 = -1;
	int cnt = 0;
	for(int i = l; i <= r; i++){
		if(s[i] == '(') cnt++;
		if(s[i] == ')') cnt--;
		if((s[i] == '+' || s[i] == '-') && cnt == 0) p1 = i;
		if((s[i] == '*' || s[i] == '/') && cnt == 0) p2 = i;
		if(s[i] == '^' && cnt == 0) p3 = i;		
	}
	if(p1 == -1 && p2 == -1 && p3 == -1){
		if(cnt > 0 && s[l] == '(') return work(l  + 1, r);
		if(cnt < 0 && s[r] == ')') return work(l, r - 1);
		if(cnt == 0 && s[l] == '(' && s[r] == ')') return work(l + 1, r - 1);
		return num(l, r);	
	}
	if(p1 != -1){
		if(s[p1] == '+') return work(l, p1 - 1) + work(p1 + 1, r);
		else return work(l, p1 - 1) - work(p1 + 1, r);
	}
	if(p2 != -1){
		if(s[p2] == '*') return work(l, p2 - 1) * work(p2 + 1, r);
		else return work(l, p2 - 1) / work(p2 + 1, r);
	}
	if(p3 != -1)	
		return (int)pow(work(l, p3 - 1), work(p3 + 1, r));
	return 0;
}
int main(){
	cin >> s;
	cout << work(0 , s.size() - 1) << '\n';
	return 0;
}
2025/7/23 17:29
加载中...