1127: 第三章:再见,林静!
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 112 Solved: 33
[Submit][Status][Web Board]
Description

郑薇的专业是土木工程,理工科的女生原本就是珍稀动物,而且大多数都长得比较抽象。想她郑微虽然不是什么绝代美女,跟她漂亮的妈妈相比也有一定差距,但她有一张讨喜的圆脸,小巧的尖下巴,大而灵动的眼睛,秀气挺直的鼻子,尤其是皮肤白皙无瑕——这是妈妈也承认自己年轻的时候也比不上的。因此,根据郑微自己无数次揽镜自照的鉴定结果,她绝对称得上是人见人爱、花见花开的美少女,简直就是琼瑶阿姨笔下的女主角。虽然琼瑶阿姨的小说已经落伍几个世纪了,但阿姨的审美观还是历久弥新的,看她挑中的连续剧女主角一个比一个红就知道了。就连一向很少夸人的林静也曾说过郑微不说话的时候还是相当有迷惑性的,称得上“静若处子”。当然,郑微很自觉地过滤掉了他后半句“动若疯兔”的评价,完全当做他对她的肯定。如今想起林静,她的脸上只是微微一笑。

生性豁达的郑薇,埋藏起自己的爱情,开始过上大学时代的忙碌生活。

土木工程的数学题:给定一些没有括号的四则运算表达式,求其结果。

Input

输入数据中含有一些表达式(数量≤1000,长度按含有的运算计,运算符≤30),表达式的运算符只含有加、减、乘、除。表达式中每个数的精度范围在double型内,表达式中没有任何其他运算符,没有括号。

Output

对每个表达式,计算其结果。按科学计数法输出,精度按6位小数,每个结果应占独立一行。如果表达式发生除0的情况,则对该表达式直接输出“DivByZero”。

Sample Input

3+5.0
6-27
6-2/0
3+5
6+1
3+5+17
1+2-3
4+5/6-43211+2+3+4+5

Sample Output

8.000000e+00
-8.000000e+00
DivByZero
3.400000e+01
1.500000e+01
-1.816667e+01

HINT

输出结果请使用printf("%e\n",ans);或者cout<<scientific<<ans<<endl;

Source
/*
这题我写了好多个版本,但是除了Ac了的这个版本(参考了大佬的),其他的版本(纯自己写的)问题暂时还没有找出来诶
ac版本学习涉及到的stringsream,学习入口:https://blog.csdn.net/jnxxhzz/article/details/53581179
*/
ac_code:

#include <bits/stdc++.h>
using namespace std;
int main()
{string s;while(cin>>s){double num[55];char oper[50];stringstream st(s);double n;char c;int k = 0,j = 0,flag = 1;st>>n;num[k++] = n;while(st>>c>>n){if(c == '*'|| c == '/'){if(c == '*')num[k-1] *= n;else{if(n == 0){flag = 0;break;}num[k-1] /= n;}}else{oper[j++] = c;num[k++] = n;}}if(flag){double ans = num[0];for(int i = 0; i < j; i++)oper[i] == '+' ? ans += num[i+1] : ans -= num[i+1];cout<<scientific<<ans<<endl;}elsecout<<"DivByZero"<<endl;}return 0;
}

(待发现)问题版本:
我写的第一个版本:
//学数据结构,栈的应用就涉及到了表达式的计算
/*
这个版本是我按我们自己算表达式的方式写的,由于最后计算部分频繁的push和pop,时间超限,同时内存很耗,不过这让我我发现不用栈还更好做(下面那个版本就是根据和这个版本改进的)
*/

#include <bits/stdc++.h>
using namespace std;
int main()
{stack<double>num,num1;stack<char>oper,oper1;double n;char p,q;while(cin>>n){num.push(n);double x,y;int flag = 1;while(1){p = getchar();if(p == '\n'){while(!oper.empty()){oper1.push(oper.top());oper.pop();}while(!num.empty()){num1.push(num.top());num.pop();}while(!oper1.empty()&&num1.size()>=2){x = num1.top();num1.pop();y = num1.top();num1.pop();q = oper1.top();oper1.pop();q == '+' ? x += y : x -= y;num1.push(x);}if(flag)cout<<scientific<<num1.top()<<endl;elsecout<<"DivByZero"<<endl;num1.pop();break;}cin>>y;if(p=='*'||p=='/'){x = num.top();num.pop();if(p == '*')x *= y;else{if(!y)flag = 0;x /= y;}num.push(x);}else{oper.push(p);num.push(y);}}}return 0;
}

/*
第一个版本派生出的,根据学长给我的这题的测试数据测试,没有发现问题,也没看出数组越界,不知道为什么一直说访问了不该访问的内存区域,心塞!!
*/

#include <bits/stdc++.h>
using namespace std;
double num[105];
char oper[50];
int main()
{char p;double n;while(cin>>n){int k = 0,j = 0;num[k++] = n;double ans,y;int flag = 1;while(1){p = getchar();if(p == '\n'){if(flag){ans = num[0];for(int i = 0; i < j; i++){oper[i] == '+' ? ans += num[i+1] : ans -= num[i+1];}cout<<scientific<<ans<<endl;}elsecout<<"DivByZero"<<endl;break;}cin>>y;if(p=='*'||p=='/'){if(p == '*')num[k-1] *= y;else{if(y == 0)flag = 0;if(flag)num[k-1] /= y;}}else{oper[j++] = p;num[k++] = y;}}}return 0;
}

/*
第三个正规的STL中stack方法(未知 Why Wrong answer)
W A 没关系,学到了东西就是王道!
*/

#include <bits/stdc++.h>
using namespace std;
double Num(string s, int &k)
{int flag = 0;double x = 0,y = 0.1;while((s[k] >= '0'&&s[k] <= '9')||s[k] == '.'){if(s[k] >= '0'&&s[k] <= '9'){if(!flag)x = x*10 + s[k] - '0';elsex = x + y * (s[k] - '0');}elseflag = 1;k++;}return x;
}
int priority(char c)
{int p = 0;switch(c){case '*':p = 2;break;case '/':p = 2;break;case '+':p = 1;break;case '-':p = 1;break;}return p;
}
int main()
{stack<double>num;stack<char>oper;string s;while(cin>>s){oper.push('\0');int k = 0,flagE = 1,flagD = 1;char c,op;double x ,y,z;while(flagE){c = s[k];if((c >= '0'&&c <= '9')||c == '.'){num.push(Num(s,k));}else if(c == '\0'&&oper.top() == '\0'){flagE = 0;}else if(priority(c) > priority(oper.top())){oper.push(c);k++;}else if(priority(c) <=  priority(oper.top())){x = num.top();num.pop();y = num.top();if(!x) flagD = 0;num.pop();op = oper.top();oper.pop();switch(op){case '+':z = x + y;break;case '-':z = y - x;break;case '*':z = x * y;break;case '/':z = y / x;break;}num.push(z);}}if(flagD)cout<<scientific<<num.top()<<endl;elsecout<<"DivByZero"<<endl;num.pop();}return 0;
}

1127: 第三章:再见,林静!相关推荐

  1. 物联网技术概论 第三章测试答案 桂小林 西安交通大学 2021智慧树

    第三章测试 全套答案均有收录,可以在我的主页查看 1.[单选题](2分) 下列不属于按传感器的工作原理进行分类的传感器是 A.压电式传感器 B.化学型传感器 C.热电式传感器 D.应变式传感器 参考答 ...

  2. 钢铁是怎样炼成的 第三章

    第三章 冬妮亚站在敞开的窗户前,闷闷不乐地望着熟悉而亲切的花园,望着花园四周那些 挺拔的.在微风中轻轻摇曳的白杨.她简直不敢相信,离开自己的家园已经整整一年了. 她仿佛昨天才离开这个童年时代就熟悉的地 ...

  3. 高红梅:第三章 海明威社会身份的定位 第一节 文学梦与作家身份的认同

    第三章  海明威社会身份的定位 海明威一生都在世界各地旅行,其足迹遍及欧洲.非洲.美洲和亚洲,有世界公民的美誉.正如学者卡洛斯·贝克(Baker ,Carlos)所言,"早在他五十五岁荣获诺 ...

  4. python入门作业编程题-Python编程:从入门到实践——【作业】——第三章(列表)...

    第三章作业 3-1姓名: 将一些朋友的姓名存储在一个列表中, 并将其命名为names . 依次访问该列表中的每个元素, 从而将每个朋友的姓名都打印出来. 3-2问候语: 继续使用练习 3-1中的列表, ...

  5. dcs 管理计算机的功能,计算机控制系统 第三章 集散控制系统(DCS).doc

    计算机控制系统 第三章 集散控制系统(DCS).doc 计算机控制系统 第三章 集散控制系统(DCS) * 吉林大学交通学院 林慧英 * 31>.1 DCS系统的概述√ 3.2 DCS的控制站 ...

  6. 【Java数据结构与算法】第三章 双向链表和约瑟夫问题

    第三章 第三章 双向链表.环形链表以及约瑟夫问题 文章目录 第三章 第三章 双向链表.环形链表以及约瑟夫问题 一.双向链表 1.双线链表对比单向链表的优点: 2.分析双向链表的遍历.添加.修改和删除的 ...

  7. 小白入门之HTML--第三章 CSS样式基础

    1.本章面试题 1.1 在网页中如何使用CSS 1.2 CSS的常用选择器有哪些 2.知识点 2.1 上一章内容回顾 ​ 上一章讲了表格和表单的基本使用 2.2 本章主要讲解CSS的基本用法 3.具体 ...

  8. linux怎么显示第三个数据,从零开始的linux 第三章

    从零开始的linux 第三章 同学们~起床咯~~(小编拿着喇叭在宿舍楼下喊道) 美好的一天从...从赞小编的博客开始~~ (↓看见小编的同学们) 什么!?你们对着可爱的小编说什么!?再说一遍!!? 同 ...

  9. 计算机二级文件名错误胶卷,第三章计算机环境安全..ppt

    <第三章计算机环境安全..ppt>由会员分享,可在线阅读,更多相关<第三章计算机环境安全..ppt(62页珍藏版)>请在人人文库网上搜索. 1.第三章 计算机环境安全,计算机环 ...

最新文章

  1. python笔记:断言assert
  2. leetcode-125-Valid Palindrome
  3. (笔记)堆和栈的区别-两种不同的数据结构
  4. 经验 | 如何提升目标检测NMS精度
  5. Linux ssh 配置
  6. linux内核简介和进程管理
  7. 2.Shell 编程从入门到精通 --- Shell编程基础
  8. Spring Boot 3.x特性-JSON(gson,jackson,json-b,fastjson)
  9. 猿辅导python大纲_解读独角兽企业“猿辅导”(一)
  10. 百度搜索结果页面的参数 搜索框提示次数(rsv_sug1)
  11. “因遭勒索软件攻击,我被认定工作失职开除,并被老东家索赔 21.5 万元”
  12. 怎样设置和使用speedceo?简洁浏览器的使用分享
  13. trove 创建实例源码分析
  14. docker 镜像压缩 docker-squash
  15. Linux下导入导出 MySQL 数据库表结构数据
  16. glut库更新旧程序无法完成编译问题描述
  17. 根号下的X平方加一C语言,根号下x平方加一分之一怎样积分
  18. 如何来做移动端网站SEO
  19. 慢慢欣赏linux x86 bootloader加载kernel的策略
  20. 可视化1300个故事 揭秘6种情节套路

热门文章

  1. matlab 边界连续,matlab的边界问题
  2. spark 2.4.5 简单使用
  3. java高并发(十七)J.U.C之BlockingQueue
  4. Python 奇淫技巧!
  5. Pandas profiling 生成报告并部署的一站式解决方案
  6. 【Python面试】 说说Python中xrange和range的区别?
  7. 推荐一位BAT数据大神!(附联系方式)
  8. 他修复了程序员吃饭的bug,估值已超过10亿美金!9.9元,2顿饭.....
  9. 机器学习中如何处理不平衡数据?
  10. ug二次开发菜单中文乱码_平面用cad,三维用Ug,不服来怼!