华为机试LISP加减乘除语句解析
简单的 LISP 加减乘除语句解析并计算结果,四种运算符号为 add、sub、mul、div,分别为加减乘除。其中数字部分皆为整数。除法取整,除数为零输出 error。
例子:
(add 3 5 7) 结果为 15
(sub 1 9) 结果为 -8
(mul 0 9) 结果为 0
(div 8 3) 结果为 2
(div 8 0) 结果为 error
(add (sub (div 8 2) (mul 1 9)) 20) 结果为 15
public static void main(String[] args) throws IOException {
String s="(add (sub (div 8 2) (mul 1 9)) 20)";
// for (String s1 : s.split("\\(")) {
// System.out.println(s1);
// }
System.out.println(operation(s));
}
public static String operation(String str){
if (str.indexOf("(",1)==-1){
String[] split = str.split("\\s+");
String ope = split[0].replace("(","");
int c1 = Integer.parseInt(split[1].replace(")",""));
int c2 = Integer.parseInt(split[2].replace(")",""));
int result=-1;
if ("div".equals(ope)&&c2==0){
return "error";
}
switch (ope){
case "div":
result=c1/c2;
break;
case "add":
result=c1+c2;
break;
case "mul":
result=c1*c2;
break;
case "sub":
result=c1-c2;
break;
}
return String.valueOf(result);
}
int left=str.lastIndexOf("("),right=str.indexOf(")",left);
String substring = str.substring(left, right+1);
String result = " "+operation(substring);
StringBuilder sb = new StringBuilder(str);
sb.replace(left,right+1,result.replace(")",""));
return operation(sb.toString());
}
相关推荐
华为2015 2014机试 笔试 试题及上机注意事项
华为2015 2014机试 笔试 试题及上机注意事项,而且其中还有部分试题答案,特别全啊
【华为OD机试B卷,GO题解独家】仿 LISP 运算
其中第一个元素 OP 为操作符,后续元素均为其参数,参数个数取决于操作符类型。不考虑 32 位溢出翻转,计算过程中也不会发生 32 位溢出翻转 除零错误时,输出 “error”,除法遇除不尽,向下取整,即 3 / 2 = 1。) 当前 OP 类型为 add / sub / mul / div(全小写),分别代表整数的加减乘除法。参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。简单起见,所有 OP 参数个数均为 2。
【华为机试真题 Python实现】仿 LISP 运算【2022 Q1 Q2 |200分】
《华为机试真题》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!欢迎加微信:Ayemmar 加微信请备注 你的CSDN ID本文解法非最优解(即非性能最优)。LISP 语言唯一的语法就是括号要配对。 形如 (OP P1 P2 …),括号内元素由单个空格分割。其中第一个元素 OP 为操作符,后续元素均为其参数,参数个数取决于操作符类型注意:参数 P1, P2 也有可能是另外一个嵌套的 (OP P1 P2 …) 当前
【华为OD统一考试(B卷)】仿 LISP 运算,JAVA 题解 | 华为OD机试考题
其中第一个元素 OP 为操作符,后续元素均为其参数,参数个数取决于操作符类型。不考虑 32 位溢出翻转,计算过程中也不会发生 32 位溢出翻转 除零错误时,输出 “error”,除法遇除不尽,向下取整,即 3 / 2 = 1。) 当前 OP 类型为 add / sub / mul / div(全小写),分别代表整数的加减乘除法。参加华为 od 机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。参加华为 od 机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。
【华为OD机试真题 Python语言】221、仿LISP运算 | 机试真题+思路参考+代码分析
,当前OP类型为add/sub/mul/div (全小写), 分别代表整数的加减乘除法,简单起见,所有OP参数个数均为2。),括号内元素由单个空格分割,其中第一个元素OP为操作符,后续元素均为其参数,参数个数取决于操作符类型。题目涉及数字均为整数,可能为负;不考虑32位溢出翻转,计算过程中也不会发生32位溢出翻转,除零错误时,输出"error",除法遇除不尽,向下取整,即3/2= 1。● 输入: (sub (mul2 4) (div9 3))输出: 5。● 输入: (div 1 0)输出: error。



