#1332 : 简单计算器

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

编写一个程序可以完成基本的带括号的四则运算。其中除法(/)是整除,并且在负数除法时向0取整。(C/C++/Java默认的除法就是向0取整,python默认的是向负无穷取整。)

例如计算 100 * ( 2 + 12 ) - (20 / 3) * 2, 结果是1388。

输入

一个长度不超过100的字符串,代表要计算的算式。包含数字0-9以及+-*/()。

输入保证计算过程不会超过32位有符号整数,并且其中的'-'都是减号没有负号。

输出

计算的结果。

样例输入
100*(2+12)-(20/3)*2
样例输出
1388

思路:栈模拟,因为有个括号,所以需要重复调用自身,写个函数;
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define esp 1e-10
const int N=1e5+,M=1e6+,mod=1e9+,inf=1e9+;
char a[M];
ll getnum(char *a,ll lenn)
{
stack<char>s;
stack<ll>num;
ll x=lenn;
ll pos=;
ll n=;
ll ans=;
if(a[pos]=='(')
{
ll en;
ll flag=;
for(ll j=pos+;;j++)
{
if(a[j]=='(')
flag++;
if(a[j]==')')
{
if(flag==)
{en=j;
break;
}
else
flag--;
}
}
ll len=en-pos-;
num.push(getnum(a+pos+,len));
pos=en+;
}
else
{
for(pos=; pos<x&&a[pos]>=''&&a[pos]<=''; pos++)
{
n*=;
n+=a[pos]-'';
}
num.push(n);
}
while(pos<x)
{
s.push(a[pos++]);
if(a[pos]=='(')
{
ll en;
ll flag=;
for(ll j=pos+;;j++)
{
if(a[j]=='(')
flag++;
if(a[j]==')')
{
if(flag==)
{
en=j;
break;
}
else
flag--;
}
}
ll len=en-pos-;
n=getnum(a+pos+,len);
pos=en+;
}
else
{
n=;
while(pos<x&&a[pos]>=''&&a[pos]<='')
{
n*=;
n+=a[pos]-'';
pos++;
}
}
if(s.top()=='*')
{
ll k=num.top();
num.pop();
num.push(n*k);
s.pop();
}
else if(s.top()=='/')
{
ll k=num.top();
num.pop();
if(n!=)
num.push(k/n);
else
num.push(n);
s.pop();
}
else
num.push(n);
}
while(!s.empty())
{
if(s.top()=='+')
ans+=num.top();
else if(s.top()=='-')
ans-=num.top();
num.pop();
s.pop();
}
return ans+num.top();
}
int main()
{
ll x,y,z,i,t;
scanf("%s",a);
printf("%lld\n",getnum(a,strlen(a)));
return ;
}
// (1-2*3)/(2*3+(0-1))

hiho #1332 : 简单计算器 栈+递归的更多相关文章

  1. F - 简单计算器(栈)

    F - 简单计算器 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descripti ...

  2. hdu-1237简单计算器(栈的运用)

    http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单的栈的运用. 首先将数字和运算符分离,分别保存在两个数组中,然后按原来的式子的顺序,首先将第一个数和第 ...

  3. HDU1237 简单计算器 栈

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目大意:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 题目分 ...

  4. HDU 1237 简单计算器 栈

    额,题目是中文的,题意就不用说了= =都看懂喽.写个字符串先把这行计算式存进去,不过不能存一个算一个,因为考虑到乘除法比加减法优先的原则,如果是加号减号就先存着等待计算,如果是乘号除号就直接算出来值就 ...

  5. hdu 1237 简单计算器(栈处理)

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. HDU1237 简单计算器 【栈】+【逆波兰式】

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. hdu1237 简单计算器[STL 栈]

    目录 题目地址 题干 代码和解释 参考 题目地址 hdu1237 题干 代码和解释 解本题时使用了STL 栈,要记得使用#include<stack>. 解本题时使用了isdigit()函 ...

  8. C语言,简单计算器【上】

    由于工作需要最近在研究PHP扩展,无可避免的涉及到了C语言.从出了学校以后C语言在实际工作中还没有用到过,所以必须要先进行一点复习工作.个人认为对于熟悉一样东西说最好的方法是上手实践.于是便想起了当时 ...

  9. hdoj 1237 简单计算器

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

随机推荐

  1. 剑指offer--面试题20

    题目:从外向里顺时针打印矩阵 做题心得:该题本质上并未考查复杂的数据结构及算法,而是考查了快速找规律的能力!!! 要想作出此题,必须先有绝对清晰的思路,否则越写越乱(因为涉及到很多的循环打印) 自己当 ...

  2. short-path problem (Floyd) 分类: ACM TYPE 2014-09-01 23:58 100人阅读 评论(0) 收藏

    #include <cstdio> #include <iostream> #include <cstring> using namespace std; cons ...

  3. Sprite Kit 入门教程

    Sprite Kit 入门教程  Ray Wenderlich on September 30, 2013 Tweet 这篇文章还可以在这里找到 英语, 日语 If you're new here, ...

  4. TGL 月光精品教程整理

    月光站群培训班目录(不定时更新中) wordpress快速配置,插件,模板知识汇总(不定期更新) 适合国人的英文站思维(1) 英语思维-送给正在苦于学英语的童鞋 做seo的重要心态 seo排名难易度分 ...

  5. Linux查看日志命令

    tail -f /var/log/apport.log more /var/log/xorg.0.log cat /var/log/mysql.err less /var/log/messages g ...

  6. wireshark常用的过滤命令

    我们使用wireshark抓包,却不知道如何分析这些包,也无法从海量的包中提取自己需要的数据,下面简单介绍下wireshark的过滤规则. 过滤源ip.目的ip.在wireshark的过滤规则框Fil ...

  7. IE6下position解决父元素被撑开的问题

    在IE6下面当子元素的宽度/高度大于父元素时, 父元素的宽度/高度就被撑开.IE7以上是不会被撑开的 <style> .f{width:100px; height:100px; backg ...

  8. MYSQL注入天书之stacked injection

    第三部分/page-3 Stacked injection Background-8 stacked injection Stacked injections:堆叠注入.从名词的含义就可以看到应该是一 ...

  9. 关于trello的分享

    https://www.the5fire.com/trello-share.html 昨天在公司跟同事分享了关于trello的使用,这里也分享给大家.比较简单,重点是让你知道有这么个东西.tangle ...

  10. 转载:PHP,MySQL的安装与配置

    本文转自:http://www.cnblogs.com/janas/archive/2012/08/27/2659240.html 一.安装配置PHP 1.下载Php的版本zip包之后,解压缩到指定目 ...