求救c⌒っ゚Д゚)っ,100分,最后一个测试点错误
查看原帖
求救c⌒っ゚Д゚)っ,100分,最后一个测试点错误
752615
xiaozeyu110115楼主2022/11/15 20:01
#include <bits/stdc++.h>
#define ll long long
#define ull unsinged long long
#define il inline
#define rg register
using namespace std;
il ll read(){
	ll X=0;bool flag=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') flag=0;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		X=(X<<1)+(X<<3)+ch-'0';
		ch=getchar();
	}
	if(flag) return X;
	return ~(X-1);
}
il void write(ll X){
	if(X<0){
		X=~(X-1);
		putchar('-');
	}
	if(X>9) write(X/10);
	putchar(X%10+'0');
}
char a[105],chr[105];
stack <char> s;
int num[105],cnt,tot;
il int getPriority(char ch) {
	int level=0;
	switch(ch){
		case '(':
    		level=1;
    		break;
    	case '+':
    	case '-':
    		level=2;
    		break;
    	case '*':
    	case '/':
    		level=3;
    		break;
		case '^':
			level=4;
    	default:
    		break;
	}
	return level;
}
il void print(){
	for(int i=0;i<cnt;i++){
		if(chr[i]!=0) printf("%c ",chr[i]);
		else printf("%d ",num[i]);
	}
	printf("\n");
}
il void del(int to){
	for(int i=to;i<cnt;i++) num[i-1]=num[i+1];
	for(int i=to;i<cnt;i++) chr[i-1]=chr[i+1];
	cnt-=2;
}
int main(){
	scanf("%s",&a);
	for(int i=0;i<strlen(a);i++){
		if(a[i]>='0'&&a[i]<='9') num[cnt++]=(int)a[i]-'0';
		else{
			if(a[i]==')'){
				while(s.top()!='('){
					chr[cnt++]=s.top();
					s.pop();
				}
				s.pop();
			}
			else{
				if(s.empty()) s.push(a[i]);
				else{
					if(a[i]=='(') s.push(a[i]);
					else{
						while(!s.empty()&&getPriority(s.top())>=getPriority(a[i])){
							chr[cnt++]=s.top();
							s.pop();
						}
						s.push(a[i]);
					}
				}
			}
		}
	}
	while(!s.empty()){
		chr[cnt++]=s.top();
		s.pop();
	}
	print();
	while(cnt!=1){
		tot++;
		if(chr[tot]==0) continue;
		else{
			switch(chr[tot]){
			case '+':
				num[tot-2]=num[tot-2]+num[tot-1];
				del(tot);
				break;
			case '-':
				num[tot-2]=num[tot-2]-num[tot-1];
				del(tot);
				break;
			case '*':
				num[tot-2]=num[tot-2]*num[tot-1];
				del(tot);
				break;
			case '/':
				num[tot-2]=num[tot-2]/num[tot-1];
				del(tot);
				break;
			case '^':
				num[tot-2]=pow(num[tot-2],num[tot-1]);
				del(tot);
				break;
			default:
				break;
			}
			print();
			tot=0;
		}
	}
	system("pause");
	return 0;
}

咋看也看不出来啊

2022/11/15 20:01
加载中...