社区讨论

第9个点RE了,请大佬帮忙看看怎么回事

P1175表达式的转换参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lz0rrbo0
此快照首次捕获于
2024/07/25 12:24
2 年前
此快照最后确认于
2024/07/25 14:07
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

int c[128][128], a[110], l, b[110], bl;
string s;
stack <int> f;
stack <int> h;  

int main(){
	c['+']['+'] = 1; c['+']['-'] = 1; c['+']['*'] = 0; c['+']['/'] = 0; c['+']['^'] = 0;
	c['-']['+'] = 1; c['-']['-'] = 1; c['-']['*'] = 0; c['-']['/'] = 0; c['-']['^'] = 0;
	c['*']['+'] = 1; c['*']['-'] = 1; c['*']['*'] = 1; c['*']['/'] = 1; c['*']['^'] = 0;
	c['/']['+'] = 1; c['/']['-'] = 1; c['/']['*'] = 1; c['/']['/'] = 1; c['/']['^'] = 0;
	c['^']['+'] = 1; c['^']['-'] = 1; c['^']['*'] = 1; c['^']['/'] = 1; c['^']['^'] = 0;
	cin >> s;
	for(int i = 0; i < s.size(); i++){
		if(s[i] >= '0' && s[i] <= '9'){
			int w = s[i] - '0';
			cout << w << " ";
			h.push(w);
		}
		else if(s[i] == '('){
			f.push(s[i]);
		}
		else if(s[i] == ')'){
			while(f.top() != '('){
				cout << (char) f.top() << " ";
				h.push(f.top());
				f.pop();
			}
			f.pop();
		}
		else{
			while(!f.empty() && c[f.top()][s[i]] == 1){
				cout << (char) f.top() << " ";
				h.push(f.top());
				f.pop();
			}
			f.push(s[i]);
		}
	}
	while(!f.empty()){
		cout << (char) f.top() << " ";
		h.push(f.top());
		f.pop();
	}
	while(!h.empty()){
		f.push(h.top());
		h.pop();
	}
	cout << endl;
	while(!f.empty()){
		if(f.top() >= '0' && f.top() <= '9'){
			a[++l] = (int)(f.top() + 48);
		}
		else{
			a[++l] = (int)(f.top());	
		}
		f.pop();
	}
	//return 0;
	while(1){
		stack <int> ff;
		memset(b, 0, sizeof(b));
		bl = 0;
		for(int i = 1; i <= l; i++){
			if(a[i] == '+' || a[i] == '-' || a[i] == '*' || a[i] == '/' || a[i] == '^'){
				int x = ff.top(); ff.pop();
				int y = ff.top(); ff.pop();
				if(a[i] == '+'){
					ff.push(y + x);
				}
				else if(a[i] == '-'){
					ff.push(y - x);
				}
				else if(a[i] == '*'){
					ff.push(y * x);
				}
				else if(a[i] == '/') {
					ff.push(y / x);	
				}
				else{
					ff.push(pow(y, x));
				}
				for(int j = 1; j <= i - 3; j++){
					if(a[j] != '+' && a[j] != '-' && a[j] != '/' && a[j] != '*' && a[j] != '^'){
						cout << a[j] << " ";
					}
					else{
						cout << (char)a[j] << " ";
					}
					b[++bl] = a[j];
				}
				cout << ff.top() << " ";
				b[++bl] = ff.top();
				for(int j = i + 1; j <= l; j++){
					if(a[j] != '+' && a[j] != '-' && a[j] != '/' && a[j] != '*' && a[j] != '^'){
						cout << a[j] << " ";
					}
					else{
						cout << (char)a[j] << " ";
					}
					b[++bl] = a[j];
				}
				cout << endl;
				for(int j = 1; j <= bl; j++){
					a[j] = b[j];
				}
				l = bl;
				break;
			}
			else{
				ff.push(a[i]);
			}
		}
		if(bl == 1){
			break;
		}
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...