1 条题解
-
0
#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
- 上传者