1 条题解

  • 0
    @ 2026-1-14 19:56:28
    #include<bits/stdc++.h>
    using namespace std;
    int n;  // [1] n-逆波兰式中数值(运算符+运算数)的总个数
    
    // [21] 辅助函数f:将数字字符串转换为对应的整数
    int f(string c){
        int sum=0;  // [22] sum-存储转换后的整数结果
        for(int i=0;i<c.size();i++){  // [23] 遍历字符串的每一位字符
            sum=sum*10+(c[i]-'0');  // [24] 逐位构建整数(字符转数字:c[i]-'0',累加计算)
        }
        return sum;  // [25] 返回转换后的整数
    }
    
    int main(){
        cin>>n;  // [2] 输入逆波兰式中数值的总个数n
        vector<int> arr;  // [3] arr-模拟栈结构,存储运算数和中间运算结果
    	while(n--){  // [4] 循环n次,逐个读取逆波兰式中的每个token(运算符/运算数)
    	    string s;  // [5] s-存储当前读取的token(运算符或运算数字符串)
    	    cin>>s;  // [6] 读取当前token
    	    if(s=="+"){  // [7] 若当前token是加法运算符
    	        long long a=arr.back();  // [8] 弹出栈顶元素作为加法右操作数
    	        arr.pop_back();  // [9] 移除栈顶元素
    	        long long b=arr.back();  // [10] 弹出新栈顶元素作为加法左操作数
    	        arr.pop_back();  // [11] 移除栈顶元素
    	        arr.push_back(a+b);  // [12] 计算b+a(栈弹出顺序为右→左),结果入栈
    	    }else if(s=="-"){  // [13] 若当前token是减法运算符
    	        long long a=arr.back();  // [14] 弹出栈顶元素作为减法右操作数
    	        arr.pop_back();  // [15] 移除栈顶元素
    	        long long b=arr.back();  // [16] 弹出新栈顶元素作为减法左操作数
    	        arr.pop_back();  // [17] 移除栈顶元素
    	        arr.push_back(b-a);  // [18] 计算b-a,结果入栈
    	    }else{  // [19] 若当前token是运算数(数字字符串)
    	        arr.push_back(f(s));  // [20] 将数字字符串转整数后入栈
    	    }
    	}
        cout<<arr.back();  // [26] 栈中最后剩余元素为逆波兰式计算结果,输出该结果
        return 0;
    }
    
    • 1

    信息

    ID
    1454
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者