不懂就问
查看原帖
不懂就问
547908
NightTide楼主2021/8/22 15:21

这两段代码有什么区别,为什么第一段可以 AC,但是第二段会 WA。

这是第一段代码

long long calculator(int now_line){
	while(number.size()) number.pop();
	for(int i=2;i<code[now_line].length();i++){
		if(isdigit(code[now_line][i])){
			int x=0;
            for(;isdigit(code[now_line][i]);i++){
				x=x*10+code[now_line][i]-'0';
            }
			i--;
			number.push(x);
		}else if(code[now_line][i]>='a'&&code[now_line][i]<='z'){
			number.push(var[code[now_line][i]-'a']);
		}else{
			if(!symbol.size()) symbol.push(code[now_line][i]);
            else if(code[now_line][i]=='(') symbol.push(code[now_line][i]);
			else if(code[now_line][i]==')'){
				while(symbol.top()!='(') cal();
				symbol.pop();
			}else if(code[now_line][i]=='*'||code[now_line][i]=='/'){
				while(symbol.size()&&symbol.top()!='+'&&symbol.top()!='-'&&symbol.top()!='(') cal();
                symbol.push(code[now_line][i]);
			}else if(code[now_line][i]=='+'||code[now_line][i]=='-'){
                while(symbol.size()&&symbol.top()!='(') cal();
                symbol.push(code[now_line][i]);
            }
		}
	}
    while(symbol.size()) cal();
    return number.top();
}

第二段代码有一段初始化

piror存的是对应符号的优先级

这是初始化

map<char,int> piror;
piror['*']=piror['/']=1;
piror['+']=piror['-']=1;
piror['(']=0;piror[')']=3;

这是和第一段相同功能的函数

long long calculator(int now_line){
    while(number.size()) number.pop();
    for(int i=2;i<code[now_line].length();i++){
        if(isdigit(code[now_line][i])){
            int x=0;
            for(;isdigit(code[now_line][i]);i++){
                x=x*10+code[now_line][i]-'0';
            }
            i--;
            number.push(x);
        }else if(code[now_line][i]>='a'&&code[now_line][i]<='z'){
            number.push(var[code[now_line][i]-'a']);
        }else{
            if(!symbol.size()) symbol.push(code[now_line][i]);
            else if(code[now_line][i]=='(') symbol.push(code[now_line][i]);
            else if(code[now_line][i]==')'){
                while(symbol.top()!='(') cal();
                symbol.pop();
            }else if(code[now_line][i]=='*'||code[now_line][i]=='/'){
                while(symbol.size()&&piror[symbol.top()]>=piror[code[now_line][i]]) cal();
                symbol.push(code[now_line][i]);
            }else if(code[now_line][i]=='+'||code[now_line][i]=='-'){
                while(symbol.size()&&piror[symbol.top()]>=piror[code[now_line][i]]) cal();
                symbol.push(code[now_line][i]);
            }
        }
    }
    while(symbol.size()) cal();
    return number.top();
}

由于我太弱了,所以没有发现什么错误,求大佬指教

2021/8/22 15:21
加载中...