package com.nowcoder.huawei;

import java.util.*;

public class LISP {
// 只通过80%
// (+ (* 2 3) (^ 4))
// (+ (* 2 3) (^ 4))(2 3)
// ((+ 2 3)
// ((+ 2 3))
// (^ (+ (* 2 3) (^ ((^ 4)))))
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String express = scanner.nextLine(); Stack<Character> stack = new Stack<>();
for (int i = 0; i < express.length(); i++) {
char c = express.charAt(i);
if (c == ')') {
StringBuilder builder = new StringBuilder();
char top;
while (!stack.empty() &&(top = stack.pop()) != '(') {
builder.append(top);
} String currExp = builder.reverse().toString();
// System.out.println(currExp); String[] ops = currExp.split(" ");
if (ops.length == 2) {
int value = Integer.valueOf(ops[1]);
value++;
String count = String.valueOf(value);
for (int j = 0; j < count.length(); j++) {
stack.push(count.charAt(j));
}
} else if (ops.length == 3) {
int a = Integer.valueOf(ops[1]);
int b = Integer.valueOf(ops[2]);
int value = 0;
switch (ops[0]) {
case "+":
value = a + b;
break;
case "*":
value = a * b;
break;
}
String count = String.valueOf(value);
for (int j = 0; j < count.length(); j++) {
stack.push(count.charAt(j));
}
} else if (ops.length == 1) {
for (int j = 0; j < ops[0].length(); j++) {
stack.push(ops[0].charAt(j));
}
} } else {
stack.push(c);
}
} StringBuilder builder = new StringBuilder();
while (!stack.empty())
builder.append(stack.pop()); try {
System.out.println(Integer.valueOf(builder.reverse().toString()));
} catch (Exception e) {
System.out.println(-1);
}
}
}

华为机试题:仿LISP的更多相关文章

  1. 牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  2. 华为机试题【13】-wave数组找字母游戏

    题目描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你 ...

  3. 华为机试题【10】-求数字基root

    题目描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 输入:输入任意一个或多个整数 输出:输出各位数字之和,直到和为个位数为止(输入异常,则返回-1),多行,每行对应一 ...

  4. 华为机试题——数组排序,且奇数存在奇数位置,偶数存在偶数位置

    题目要求很简单,就是给你一个数组,对它进行排序,并且排序后,奇数要放在奇数的位置上,偶数要放在偶数的位置上,如果不满足这个规则的话就在数组上填充0 实现代码如下,文中值得注意的一点就是如何判读这个数字 ...

  5. 求一个int型整数的两种递减数之和(java)--2015华为机试题

    题目描述: 给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的 ...

  6. 2017华为机试题--Floyd算法

    小K是X区域的销售经理,他平常常驻"5"城市,并且经常要到"1"."2"."3"."4"." ...

  7. 华为机试题 N阶楼梯的走法,每次走一步或者两步

    在Stairs函数中实现该功能: 一个楼梯有N阶,从下往上走,一步可以走一阶,也可以走两阶,有多少种走法? (0<n<=30)<> 例如3阶楼梯有3种走法: 1.1.1 1.2 ...

  8. 2014华为机试西安地区B组试题

    2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.開始,电灯所有关着. 有n ...

  9. 2014华为机试西安地区A组试题

    2014华为机试西安地区A组试题 题目一.分苹果 M个同样苹果放到N个同样篮子里有多少种放法,同意有篮子不放. 1<=M<=10.1<=N<=10 比如5个苹果三个篮子,3,1 ...

随机推荐

  1. busybox中memdev的使用方法

    busybox中已经集成了devmem工具,你可以配置busybox即可. 在busybox的杂项中找到: CONFIG_USER_BUSYBOX_DEVMEM: devmem is a small ...

  2. P5657 格雷码【民间数据】

    P5657 格雷码[民间数据] 题解 其实这题水啊 打表找规律 [1]0   1 [2]00   01  11  10 [3]000   001   011   010   110   111   1 ...

  3. [Scikit-learn] 1.1 Generalized Linear Models - Neural network models

    本章涉及到的若干知识点(红字):本章节是作为通往Tensorflow的前奏! 链接:https://www.zhihu.com/question/27823925/answer/38460833 首先 ...

  4. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

  5. 在linux下php挂接mysql.so扩展的方法

    第一步:进入php源码中的"ext/mysql"目录下命令:cd 第二步:在当前目录下运行phpize 命令:/usr/local/php524/bin/phpize phpize ...

  6. windows7-tomcat配置

    1.下载 2.解压缩 3.配置环境变量 (1)计算机属性--高级系统配置--高级--环境变量--系统变量--新建 (2)CATALINA_HOME 如:C:\apache-tomcat-7.0.73 ...

  7. 最新 优刻得java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.优刻得等10家互联网公司的校招Offer,因为某些自身原因最终选择了优刻得.6.7月主要是做系统复习.项目复盘.LeetCo ...

  8. docker国内镜像加速

      在/etc/docker/daemon.json中添加内容: { "registry-mirrors": ["https://registry.docker-cn.c ...

  9. js复制文本

    第一种: 自己测试时 只适合于input 和textarea 但是针对于其他标签的复制就不能用了.代码如下: <!DOCTYPE html> <html> <head&g ...

  10. java中JDBC是什么?

    [学习笔记] JDBC是什么? JDBC即(java database connectivity数据连接).JDBC是Sun公司编的一堆类和方法,都封装在java.sql包中.你可以利用这堆类和方法来 ...