1331:【例1-2】后缀表达式的值

简介: 1331:【例1-2】后缀表达式的值

1331:【例1-2】后缀表达式的值

时间限制: 10 ms         内存限制: 65536 KB

【题目描述】

从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。

比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:

栈中的变化情况:

运行结果:-47

提示:输入字符串长度小于250,参与运算的整数及结果之绝对值均在264范围内,如有除法保证能整除。

【输入】

一个后缀表达式。

【输出】

一个后缀表达式的值。

【输入样例】

16 9 4 3 +*-@

【输出样例】

-47

1. #include <iostream>
2. #include <cstdio>
3. #include <cstring>
4. #include <stack>
5. using namespace std;
6. stack<long long> s;
7. char ch[260];
8. int main(int argc, char *argv[])
9. {
10.   gets(ch);
11.   int l=strlen(ch)-2;
12.   long long  t=0,a,b;
13.   for(int i=0;i<=l;i++){
14.     if(ch[i]>='0'&&ch[i]<='9') t=t*10+ch[i]-'0';
15.     else if(ch[i]==' '){
16.       s.push(t);t=0;
17.     }
18.     else if(ch[i]=='+'){
19.       a=s.top();s.pop();
20.       b=s.top();s.pop();
21.       s.push(b+a);
22.     }
23.     else if(ch[i]=='*'){
24.       a=s.top();s.pop();
25.       b=s.top();s.pop();
26.       s.push(b*a);
27.     }
28.     else if(ch[i]=='-'){
29.       a=s.top();s.pop();
30.       b=s.top();s.pop();
31.       s.push(b-a);
32.     }
33.     else if(ch[i]=='/'){
34.       a=s.top();s.pop();
35.       b=s.top();s.pop();
36.       s.push(b/a);
37.     }
38.   }
39.   cout<<s.top()<<endl;
40.   return 0;
41. }
1. #include <iostream>
2. #include <cstdlib>
3. #include <cstdio>
4. #include <string>
5. #include <vector>
6. #include <stack>
7. #include <sstream>
8. using namespace std;
9. string calc_suffix(vector<string> &vs)
10. {
11.   stringstream ss;//主要用来进行数据类型转换
12.   stack<string> stk;//string类型的字符串栈 
13.   string ops="_+-*/";
14.   for(int i=0;i<vs.size();i++){
15.     //判断是运算符 
16.     if(vs[i].size()==1 && ops.find(vs[i].at(0),0)!=string::npos) 
17.     {
18.       long long ans,a,b;
19.       b=atoll(stk.top().c_str());//将数字字符串转换为数字 
20.       stk.pop();
21.       a=atoll(stk.top().c_str());
22.       stk.pop();
23.       switch(vs[i].at(0)){
24.         case '+': ans=a+b;break; 
25.         case '-': ans=a-b;break; 
26.         case '*': ans=a*b;break; 
27.         case '/': ans=a/b;break; 
28.       }
29.       ss<<ans;// 将long long 类型的值放入输入流中(转换为 string 类型)
30.       stk.push(ss.str());// 压入栈 
31.       ss.str("");//清空 ss 
32.     }
33.     else stk.push(vs[i]);
34.   }
35.   return stk.top();
36. }
37. int main(int argc, char *argv[])
38. {
39.   vector<string> vs;
40.   char exp[255]={0};
41.   gets(exp);
42.   int i=0;
43.   string nums,ops;
44.   ops="+-*/";
45.   while(exp[i]!='@'){
46.     if(exp[i]==' '&&nums.size()>0){
47.       vs.push_back(nums);
48.       nums.clear();
49.     }
50.     else if(ops.find(exp[i],0)!=string::npos){
51.       nums.append(1,exp[i]);
52.       vs.push_back(nums);
53.       nums.clear();
54.     }
55.     else if(isdigit(exp[i])){ //判断是数字字符 
56.       nums.append(1,exp[i]);//字符串末尾追加
57.     }
58.     i++;
59.   }
60.   cout<<calc_suffix(vs)<<endl;
61.   return 0;
62. }

 

相关文章
|
6月前
|
机器学习/深度学习 算法
Proximal SFT:用PPO强化学习机制优化SFT,让大模型训练更稳定
本文介绍了一种改进的监督微调方法——Proximal Supervised Fine-Tuning (PSFT),旨在解决传统SFT易过拟合、泛化能力差及导致“熵坍塌”的问题。受PPO强化学习算法启发,PSFT通过引入参数更新的稳定性机制,防止模型在训练中变得过于确定,从而提升探索能力与后续强化学习阶段的表现。实验表明,PSFT在数学推理、模型对齐及泛化能力方面均优于传统SFT。
648 3
Proximal SFT:用PPO强化学习机制优化SFT,让大模型训练更稳定
|
SQL 自然语言处理 关系型数据库
MySQL的match匹配多个字符串的语法
【8月更文挑战第27天】MySQL的match匹配多个字符串的语法
621 67
|
人工智能 自然语言处理 PyTorch
从千问Agent看AI Agent——我们很强,但还有很长的路要走
本项目主要通过通义千问作为基础大模型,通义Agent浏览器助手实现网页和PDF材料,以帮助您快速了解多个页面的内容,总结您浏览过的内容,并减少繁琐的文字工作。实现数据分析与可视化、处理文件等的代码解释器功能。
从千问Agent看AI Agent——我们很强,但还有很长的路要走
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
12月前
用通义万象做一个动态海报庆祝4月24日中国航天日
这段文案描述了一幅动画海报的设计理念,融合传统与现代、科技与梦想。画面以上海黄浦江为背景,明月升起象征传统,火箭升空代表科技探索。穿着旗袍的女孩和多元人群展现文化传承,火箭化为飞船遨游宇宙寓意人类追求未知。古代天文仪器与现代科技呼应,体现历史与未来的对话。整体传达对科技成就的喜悦及对未来的美好期许,致敬中国科学家与宇航员,祝福祖国繁荣昌盛。
|
安全 前端开发 搜索推荐
如何创建一个网站?
网站建设是指创建和开发一个网站的过程,它涵盖了从规划、设计到实施、发布以及维护网站的整个过程。
3136 3
|
缓存 监控 Linux
|
安全 Java 开发者
强大!Spring Cloud Gateway新特性及高级开发技巧
在微服务架构日益盛行的今天,网关作为微服务架构中的关键组件,承担着路由、安全、监控、限流等多重职责。Spring Cloud Gateway作为新一代的微服务网关,凭借其基于Spring Framework 5、Project Reactor和Spring Boot 2.0的强大技术栈,正逐步成为业界的主流选择。本文将深入探讨Spring Cloud Gateway的新特性及高级开发技巧,助力开发者更好地掌握这一强大的网关工具。
834 6
|
数据采集 监控 数据可视化
用Python构建动态折线图:实时展示爬取数据的指南
本文介绍了如何利用Python的爬虫技术从“财富吧”获取中国股市的实时数据,并使用动态折线图展示股价变化。文章详细讲解了如何通过设置代理IP和请求头来绕过反爬机制,确保数据稳定获取。通过示例代码展示了如何使用`requests`和`matplotlib`库实现这一过程,最终生成每秒自动更新的动态股价图。这种方法不仅适用于股市分析,还可广泛应用于其他需要实时监控的数据源,帮助用户快速做出决策。
679 0
|
机器学习/深度学习 自然语言处理 算法
AIGC技术的核心算法与发展趋势
【7月更文第27天】随着人工智能技术的迅速发展,AIGC技术已经逐渐成为内容创造领域的一个重要组成部分。这些技术不仅能够帮助人们提高工作效率,还能创造出以往难以想象的新颖内容。本文将重点介绍几种核心算法,并通过一个简单的代码示例来展示如何使用这些算法。
578 7

热门文章

最新文章