1 条题解
-
0
#include<bits/stdc++.h> using namespace std; // [1] arr数组-存储后缀表达式的每个token(数字或运算符),最大支持10000个token string arr[10000]; // [2] f函数:将字符串形式的整数转换为int类型(支持多位数) // 参数说明:q-输入的数字字符串(如"14"、"20") int f(string q){ // [3] j-当前位的权重(个位1、十位10、百位100...),初始为1;sum-累计数值,初始为0 int j=1,sum=0; // [4] 从字符串末尾(个位)向开头遍历,计算整数的数值 for(int i=q.size()-1;i>=0;i--){ sum+=(q[i]-'0')*j; j*=10; } return sum; } int main() { // [5] s-临时存储每个输入的token(数字/运算符/@) string s; cin>>s; // [6] x-记录输入的有效token总数(排除结束符@),初始为0 int x=0; // [7] 读取输入:直到遇到结束符@,将每个token存入arr数组 while(s!="@"){ arr[x++]=s; cin>>s; } // [8] v-计算栈,存储int类型的操作数和中间结果 stack<int> v; // [9] 顺序遍历后缀表达式的每个token(后缀表达式计算规则:顺序遍历,数字压栈,运算符弹出两个操作数计算) for(int i=0;i<x;i++){ // [10] 情况1:当前token是数字(以0-9开头),转换为int后压栈 if(arr[i][0]>='0' && arr[i][0]<='9'){ v.push(f(arr[i])); // [11] 情况2:当前token是加法运算符'+' }else if(arr[i]=="+"){ int a=v.top();v.pop(); int b=v.top();v.pop(); v.push(b+a); // 后缀表达式ab+ → b+a // [12] 情况3:当前token是减法运算符'-' }else if(arr[i]=="-"){ int a=v.top();v.pop(); int b=v.top();v.pop(); v.push(b-a); // 后缀表达式ab- → b-a // [13] 情况4:当前token是乘法运算符'*' }else if(arr[i]=="*"){ int a=v.top();v.pop(); int b=v.top();v.pop(); v.push(b*a); // 后缀表达式ab* → b*a // [14] 情况5:当前token是除法运算符'/'(题目要求整除,使用整数除法) } else if(arr[i]=="/"){ int a=v.top();v.pop(); int b=v.top();v.pop(); v.push(b/a); // 后缀表达式ab/ → b/a(整除) } } // [15] 输出栈顶的最终计算结果(后缀表达式的结果存储在栈顶) cout<<v.top(); return 0; }
- 1
信息
- ID
- 1268
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者