#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. 使用微信JSSDK自定义分享内容

    微信在6.0.2.58版本以后开始使用新的api,在Android系统中不能用以前的代码来自定义分享内容了. 现在自定义内容的方法走的是公众号的一套流程 1获取access_token 2得到toke ...

  2. IE如何兼容placeholder属性

    在前端开发中,经常需要为input设置placeholder属性,但是placeholder是HTML5新属性,在IE10以下不兼容,那么如何完美兼容呢? 网上搜索了一下,其实也挺简单的,可以采用以下 ...

  3. 编写单例的 dojo class

    define([ "dojo/_base/declare" ],function( declare ){ var TimeChartService = declare(" ...

  4. SOA之(3)——面向服务计算基础

    面向服务计算基础(Service-Oriented Computing Fundamentals) 面向服务的计算(Service-Oriented Computing) 面向服务的计算是一个伞状术语 ...

  5. 金融证券协议FIX/FAST/STEP

    金融信息交换协议FIX是适用于实时证券.金融电子交易的数据通信标准.它是把各类证券金融业务需求流程格式化,使之成为一个可用计 算机语言描述的功能流程,并在每个业务功能接口上统一交换格式.STEP(Se ...

  6. java基础类:Object类和Math类

    1.2.3.4.5.6.7.7.

  7. 线性时间常数空间找到数组中数目超过n/5的所有元素

    问题描述: Design an algorithm that, given a list of n elements in an array, finds all the elements that ...

  8. LA 2031

    Mr. White, a fat man, now is crazy about a game named ``Dance, Dance, Revolution". But his danc ...

  9. ***PHP implode() 函数,将数组合并为字符串;explode() 函数,把字符串打散为数组

    实例 把数组元素组合为字符串: <?php $arr = array('Hello','World!','I','love','Shanghai!'); echo implode(" ...

  10. http协议本身能获取客户端Mac地址问题

    http 位于网络应用程 应用层 会话层 表示层 传输层 网络层 数据链路层 物理层 数据在最高层开始传输 没经历下面一层加一层的头,然后传入目的电脑再进行一层层的解刨,所以http本来没有mac而接 ...