萌新求调a+b
查看原帖
萌新求调a+b
1411906
Underthelight楼主2024/8/9 11:28

rt,10pts。

#include<bits/stdc++.h> 
using namespace std;
const int N=1e9+7;
char a[10003];
long long dfs(int l,int r){
//	cout<<l<<" "<<r<<"\n";
	int x=0,y=0,z=0;
	for(int i=l;i<=r;i++){
		if(a[i]=='(') x++;
		if(a[i]==')') x--;
		else {
			if(x==0&&(a[i]<'0'||a[i]>'9')){
				if(a[i]=='*') y=i;
				else z=i;
			}
		}
	}
	if(z){
		if(a[z]=='+'){
			return (dfs(l,z-1)+dfs(z+1,r))%N;
		}
		if(a[z]=='-'){
			return (dfs(l,z-1)-dfs(z+1,r)+N)%N;
		}
	}
	if(y){
		return dfs(l,y-1)*dfs(y+1,r)%N;
	}
	if(a[l]=='('&&a[r]==')') return dfs(l+1,r-1);
	else{
		int k=0;
		for(int i=l;i<=r;i++){
			k=k*10+a[i]-'0';
		}
		return k;
	}
}
int main(){
	scanf("%s",a+1);
	int n= strlen(a+1);
	printf("%lld\n",dfs(1,n));
	return 0;
}
2024/8/9 11:28
加载中...