网易2017春招笔试真题编程题集合——奇怪的表达式求值
Posted CYTing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网易2017春招笔试真题编程题集合——奇怪的表达式求值相关的知识,希望对你有一定的参考价值。
常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 *)。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少
输入描述:
输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9. 保证表达式都是合法的,排列规则如样例所示。
输出描述:
输出一个数,即表达式的值
输入例子:
3+5*7
输出例子:
56
这道题有自己写的代码,但是自己的同一个思路两次不同时间写出来也有些不一样。自己的代码:
import java.util.*; //思路:因为输入的表达式都是合法的,所以一定是按数字+运算符号+数字+....+数字组成的 // 所以,将输入的字符串分成只有数字和只有运算符号的数组 public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String str=sc.nextLine(); int[] number=new int[str.length()/2+1]; char[] symbol=new char[str.length()/2]; for(int i=0;i<str.length();i++){//将字符串分成数字和符号两个数组 if(i%2==0) number[i/2]=str.charAt(i); else symbol[i/2]=str.charAt(i); } for(int i=0;i<number.length;i++){ number[i]=number[i]-48;//将字符‘0‘-‘9‘转换为对应的整数0-9 } int result=number[0]; for(int i=0;i<symbol.length;i++){ if(symbol[i]==‘+‘) result+=number[i+1]; else if(symbol[i]==‘-‘) result-=number[i+1]; else result*=number[i+1]; } System.out.println(result); } sc.close(); } } //出现问题:直接运算时是按字符的ASCII码运算的(0-9:48-57) //因为字符‘0‘-‘9‘是对应的ASCII码,应转换为对应的整数0-9 //不能用类型转换,因为转换后还是ASCII码对应的整数,减去对应的ASCII码值就可以了 //自己举例运行时,又出问题,像11 2334就没转换成数字整数 //但题目里参与计算的数字只有0~9 //第二次写的 //思路:获取输入,分别数字和运算符号两个数组,判断符号是加减乘, //用数字数组的两个元素进行计算,并将结果更新到数字数组的元素中,便于继续运算 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String str=sc.nextLine(); int len=str.length(); int[] number=new int[len/2+1]; String[] symbol=new String[len/2]; for(int i=0;i<len;i++){//分成两个数组 if(i%2==0){ number[i/2]=Integer.parseInt(str.substring(i, i+1)); }else{ symbol[i/2]=str.substring(i, i+1); } } for(int i=0;i<symbol.length;i++){ if(symbol[i].equals("+")){ //直接用==比较会出错,因为symbol对象和字符串+ - *是两个不同的地址 //equals比较的是字符串的内容 number[i+1]=number[i]+number[i+1]; } else if(symbol[i].equals("-")){ number[i+1]=number[i]-number[i+1]; } else{ number[i+1]=number[i]*number[i+1]; } } System.out.println(number[number.length-1]); } sc.close(); } }
答案里别人的代码:
//https://www.nowcoder.com/test/question/done?tid=8734418&qid=83054#summary
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.next(); sc.close(); int tmp = s.charAt(0) - ‘0‘; for (int i = 1; i < s.length() - 1; ) { char operate = s.charAt(i); i ++; StringBuilder sb = new StringBuilder(); while ( i < s.length() && s.charAt(i) >= ‘0‘ && s.charAt(i) <= ‘9‘) { sb.append(s.charAt(i)); i ++; } int r = Integer.valueOf(sb.toString()); switch (operate) { case ‘+‘: tmp = tmp + r; break; case ‘-‘: tmp = tmp - r; break; case ‘*‘: tmp = tmp * r; break; case ‘/‘: tmp = tmp / r; break; } } System.out.println(tmp); } }
以上是关于网易2017春招笔试真题编程题集合——奇怪的表达式求值的主要内容,如果未能解决你的问题,请参考以下文章