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. CodeWar打怪升级-Python篇

    1.  The goal of this exercise is to convert a string to a new string where each character in the new ...

  2. linux Host key verification failed.错误

    Host key verification failed. 1. ssh-keygen -R 你要访问的IP地址 2. ssh-keygen -R 108.61.163.242

  3. Dynatrace

    1.概述 过去,企业的IT部门在测量系统性能时,一般重点测量为最终用户提供服务的硬件组件的利用率,如CPU利用率以及通过网络传输的字节数.虽然这种方法也提供了一些宝贵的信息,但却忽视了最重要的因素-- ...

  4. C# 去除所有的html标签

    /// <summary> /// 去除所有的html标签 /// </summary> /// <param name="strhtml">& ...

  5. android java.util.Date和java.util.sql中Date的区别

    1.将java.util.Date 转换为 java.sql.Date java.sql.Date sd; java.util.Date ud; //initialize the ud such as ...

  6. test20190510

  7. Windows 10 搭建Python3 安装使用 protobuf

    Protobuf对比XML.Json等其他序列化的优势 protobuf 不管是处理时间上,还是空间占用上都优于现有的其他序列化方式.内存暂用是java 序列化的1/9,时间也是差了一个数量级,一次操 ...

  8. unittest快速装载目前下所有测试用例的方法

    import unittest from BeautifulReport import BeautifulReport #导入BeautifulReport if __name__ == '__mai ...

  9. Scrapy五大核心组件工作流程

    一.Scrapy五大核心组件工作流程 1.核心组件 # 引擎(Scrapy) 对整个系统的数据流进行处理, 触发事务(框架核心). # 调度器(Scheduler) 用来接受引擎发过来的请求. 由过滤 ...

  10. Python-OpenCV实现二值图像孔洞填充

    代码如下: import cv2 import numpy as np def FillHole(mask): contours, hierarchy = cv2.findContours(mask, ...