Description

XXC小童鞋对lisp非常感兴趣,不过lisp是一个比较小众的黑客语言,因为它采用了一种不太容易理解的表达方式——S表达式。 S表达式形式如下:

(Operation A B……)
 
 
其中Operation是操作符,A、B等是操作数(操作数的数量根据操作符而定),A、B等可以是直接的数,也可以是其他S表达式。算式的结果为A (Operation) B.例如(+ 1 2)=3. 现在XXC童鞋希望你为他做一个简化版的lisp解释器,可以处理基本的四则二元运算。

Input

第一行包含一个整数N,代表用例个数。(N≤100) 接下来的N行每行包含一个用例,每一个用例包含一个lisp表达式,涉及四种二元操作符(+、-,*,/),嵌套层数不超过200。 善良的XXC童鞋希望解释器可以简单一点,所以在S表达式中,每个操作数都是整数类型。(注意到整数除法中,7/2=3.) 数据保证不会出现除0,不会超出int的范围

Output

对于给定的表达式,请给出其计算后的结果,形如“Case #id: result”

Sample Input

3

(+ 1 2)

(/ 1 3)

(/ 6 (+ 1 2))

Sample Output

Case #1: 3

Case #2: 0

Case #3: 2

Source

第八届北京交通大学ACM程序设计竞赛

#include <iostream>
#include <stack>
#include <string.h>
#include <stdlib.h>
using namespace std;
int main()
{
char str [];
int count;
cin>>count;
cin.getline(str,);
int t=count;
while(t--){
stack<double> Num;
stack<char> Op;
cin.getline(str,);
int len =strlen(str);//<string.h>
int sum=;
for (int i = ; i <len; i++)
{
char temp=str[i];
if (temp=='(')
{
Op.push(temp);
}
if (temp=='+'||temp=='-'||temp=='*'||temp=='/')
{
Op.push(temp);
}
if (temp==')')
{
int c=Num.top();
Num.pop();
int b=Num.top();
Num.pop();
char Temp_Op=Op.top();
if (Temp_Op=='+')
{
sum=b+c;
Op.pop();
}
if (Temp_Op=='-')
{
sum=b-c;
Op.pop();
}
if (Temp_Op=='*')
{
sum=b*c;
Op.pop();
}
if (Temp_Op=='/')
{
sum=b/c;
Op.pop();
}
Op.pop();
Num.push(sum);
}
if (isdigit(temp))
{
int temp_num=atoi(&str[i]); //<stdlib.h>
while(i<len && isdigit(str[i]))
{
i++;
}
i--;
Num.push(temp_num);
}
}
cout<<"Case #"<<count-t<<": "<<Num.top()<<endl;
}
}

lisp的解释器的更多相关文章

  1. [编译原理]用BDD方式开发lisp解释器(编译器)|开发语言java|Groovy|Spock

    lisp是一门简单又强大的语言,其语法极其简单: (+ 1 2 ) 上面的意思 是:+是方法或函数,1 ,2 是参数,fn=1+2,即对1,2进行相加求值,结果是:3 双括号用来提醒解释器开始和结束. ...

  2. 翻译:Lisp Style Tips for the Beginner - Heinrich Taube

    原文:Lisp Style Tips for the Beginner 本篇文章是一篇非正式的摘要,旨在帮助新手写出高效.易读的Lisp代码. 1 赋值   1.1 避免使用eval.赋值是Lisp内 ...

  3. 17 个 Linux 下用于 C/C++ 的最好的 IDE

    C++,一个众所周知的 C 语言的扩展,是一个优秀的.强大的.通用编程语言,它能够提供现代化的.通用的编程功能,可以用于开发包括视频游戏.搜索引擎.其他计算机软件乃至操作系统等在内的各种大型应用. C ...

  4. 普通Linux用户1分钟上手vi编辑器

    *导读:普通用户只要花1分钟看第二部分即可.高级用户请忽略本文* 目录 1. 编辑器之战 2. vi的使用 2.1 vi的3个模式 2.2 vi的3个模式切换 2.3 vi最基本的命令 2.4 vi的 ...

  5. [转载]为何 Emacs 和 Vim 被称为两大神器

    Emacs 是神的编辑器,而 Vim 是编辑器之神.二者为何会有如此美誉,且听本文向你一一道来. 目 录 0. 序章:神器的传说 1. 无敌的可扩展性 1.1 可扩展性给了软件强大的生命 1.2 Em ...

  6. 编辑器之王:Emacs 和 Vim

    Emacs 是神的编辑器,而 Vim 是编辑器之神.二者为何会有如此美誉,且听本文向你一一道来. Author: Jiqing Wu email: jiqingwu@gmail.com homepag ...

  7. 基于ACIS/HOOPS的3D应用开发简介 【转】

    (整理) 平台:                造型引擎——ACIS         显示引擎——Direct3D/OpenGL/GDI         应用框架——HOOPS   组件关系图     ...

  8. map的实现和柯里化(Currying)

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/11329874.html 作者:窗户 ...

  9. vim和emacs

    vim和emacs 在编程界一直有两大神器的传说.这两大神器一个是emacs,一个是vim.一个是神的编辑器,一个是编辑器之神. 程序员的圈子里面也一直流传着一个段子,说是世界上的程序员分为三种.使用 ...

随机推荐

  1. Java10 新特性

    Java 10 新特性 这次发布的 Java 10,新带来的特性并不多. 根据官网公开资料,共有 12 个 JEP(JDK Enhancement Proposal 特性加强提议),带来以下加强功能: ...

  2. 放大缩小,只需要使用这2个函数:SetWindowExtEx、SetViewportExtEx

    相似函数: ScaleWindowExtEx.ScaleViewportExtEx 本例效果图: 代码文件: unit Unit1; interface uses   Windows, Message ...

  3. delphi json uLkJSON

    delphi 7 json 做个笔记,留着以后用 --源码 unit Umain; interface uses Windows, Messages, SysUtils, Variants, Clas ...

  4. 学习 NLP(一)—— TF-IDF

    TF-IDF(Term Frequency & Inverse Document Frequency),是一种用于信息检索与数据挖掘的常用加权技术.它的主要思想是:如果某个词或短语在一篇文章中 ...

  5. 在WPF中添加3D特性

    原文:在WPF中添加3D特性 35.4  在WPF中添加3D特性 本节介绍WPF中的3D特性,其中包含了开始使用该特性的信息. 提示: WPF中的3D特性在System.Windows.Media.M ...

  6. 格式字符串分配stl::string

    代码非常easy,不解释,直接在代码: #include <cstdio> #include <cstdarg> #include <iostream> using ...

  7. ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 MVC 前面几章节中,我们都是基于 ASP.NET 空项目 ...

  8. 如何导入以前的qq聊天记录

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在新版的qq2013已经可以设置聊天记录的保存路径,但是如何把以前的聊天记录都导入进来呢?今天找到了办法.首先把原来q ...

  9. VC绘制控件如何防止闪烁

    理论上不管什么控件都适用,方法如下: 新建一个MFC类,继承原来的控件类型,对于VC自动生成的类进行如下改动: 首先覆盖 OnEraseBkgnd() 防止擦除时填涂背景: BOOL CXXXCtrl ...

  10. Android自注-15-Activity生命周期

    很长一段时间没有写博客,懒,感慨一下. Activity的生命周期是一块以下附图: 通过代码下面简单的介绍一下.一些内容看代码的凝视: package com.mxy; import android. ...