Expresión de sufijo P1449 (Luogu)

Portal de título original

Inserte la descripción de la imagen aquí
Idea: Defina una pila para almacenar el tipo int, y luego convierta los datos de entrada y guárdelos en la pila, pero divídalos por símbolos aritméticos, avance el primer número, luego ingrese el segundo número y luego arroje el último número primero en esta vez, el número avanzado es el elemento superior de la pila. Luego, después de realizar operaciones en estos dos números, el primer número se descarta y la suma del resultado de la operación se empuja a la pila, que se puede repetir.

Referencia de código

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
char a[MAXN];
int sum,k;
stack <int> stk;
int main(){
    
    
    gets(a);
	for(int i=0;a[i]!='@';i++)
	{
    
    
		if(a[i]=='.')
		{
    
    
			sum=0,k=1;
			//将数据转换后存入栈中
			for(int j=i-1;j>=0&&a[j]>='0'&&a[j]<='9';j--){
    
    
                sum=sum+(a[j]-'0')*k;
                k*=10;
			}
			stk.push(sum);
			continue;
		}
		if(a[i]>='0' && a[i]<='9')
            continue;
		sum=stk.top();//栈顶元素
		stk.pop();//弹出栈顶元素
		if(a[i]=='+') sum=stk.top()+sum;
		if(a[i]=='-') sum=stk.top()-sum;
		if(a[i]=='*') sum=stk.top()*sum;
		if(a[i]=='/') sum=stk.top()/sum;
		stk.pop();
		stk.push(sum);//将sum压入栈中
    }
	cout<<sum<<endl;
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/Bertil/article/details/106794212
Recomendado
Clasificación