50pts求助
查看原帖
50pts求助
665933
__LZH__楼主2023/11/20 22:51
#include<bits/stdc++.h>

#define int long long

using namespace std;

const int MOD = 1e9 + 7;

string s, hz;
char c[2000010], top;
int a[100010];

void hzbds(string s){
	int x = 0;
	for(int i = 0; i < s.size(); i++){
		if(s[i] == '('){
			c[++top] = s[i];
		}else if(s[i] == ')'){
			while(top > 0 && c[top] != '('){
				hz += c[top];
				top--;
			}
			top--;
		}else if(s[i] >= '0' && s[i] <= '9'){
			hz += s[i];
		}else if(s[i] == '+' || s[i] == '-'){
			hz += ' ';
			while(top > 0 && c[top] != '('){
				hz += c[top], top--;
			}
			c[++top] = s[i];
			
		}else if(s[i] == '*' || s[i] == '/'){
			hz += ' ';
			while(top > 0 && c[top] != '(' && c[top] != '+' && c[top] != '-'){
				hz += c[top], top--;
			}
			c[++top] = s[i];
		}else if(s[i] == '^'){
			hz += ' ';
			while(top > 0 && c[top] != '(' && c[top] != '+' && c[top] != '-' && c[top] != '*' && c[top] != '/' && c[top] != '^'){
				hz += c[top], top--;
			}
			c[++top] = s[i];
		}
	}
	while(top > 0){
		hz += c[top];
		top--;
	}
}

int Pow(int x, int y){
	int ans = 1;
	while(y > 1){
		if(y % 2 == 1){
			ans = (ans % MOD * x % MOD) % MOD;
		}
		x = (x % MOD * x % MOD) % MOD;
		y /= 2;
	}
	return (ans % MOD * x % MOD) % MOD;
}

signed main(){
  cin >> s;
  hzbds(s); top = 0;
  for(int i = 0; i < hz.size(); i++){
 		cout << hz[i];
 		if(i == s.size() - 1 || (hz[i + 1] != ' ' && hz[i] != ' ')){
  		cout << ' ';
		}
	}
	cout << '\n';
  for(int i = 0, x = 0; i < hz.size(); i++){
  	if(hz[i] >= '0' && hz[i] <= '9'){
  		x = x * 10 + hz[i] - '0';
			if(hz[i + 1] < '0' || hz[i + 1] > '9'){
				a[++top] = x;
			}
		}else if(hz[i] == ' '){
			x = 0;
		}else{
			if(hz[i] == '+'){
				a[top - 1] = (a[top - 1] % MOD + a[top] % MOD) % MOD , top--;
				x = 0;
			}else if(hz[i] == '-'){
				a[top - 1] = (a[top - 1] % MOD - a[top] % MOD + MOD) % MOD, top--;
				x = 0;
			}else if(hz[i] == '*'){
				a[top - 1] = (a[top - 1] % MOD * a[top] % MOD) % MOD, top--;
				x = 0;
			}else if(hz[i] == '/'){
				a[top - 1] = (a[top - 1] % MOD / a[top] % MOD) % MOD, top--;
				x = 0;
			}else if(hz[i] == '^'){
				a[top - 1] = Pow(a[top - 1], a[top]);
				a[top - 1] %= MOD, top--;
				x = 0;
			}
			for(int j = 1; j < top; j++){
				cout << a[j] << ' ';
			}
			cout << a[top];
			if(i != hz.size() - 1 && hz[i + 1] != ' '){
				cout << ' ';
			}
		  for(int j = i + 1; j < hz.size(); j++){
		 		cout << hz[j];
		 		if(j == s.size() - 1 || (hz[j + 1] != ' ' && hz[j] != ' ' && ((hz[i] < ' 0' || hz[i] > '9') || (hz[i + 1] < ' 0' || hz[i + 1] > '9')))){
		  		cout << ' ';
				}
			}
			cout << '\n';
		}
	}
  return 0;
}
2023/11/20 22:51
加载中...