网易2017实习生招聘笔试题—奇怪的表达式求值

来源:互联网 发布:网络建设需求 编辑:程序博客网 时间:2024/04/28 23:12

1、题目

  • 题目描述
    常规的表达式求值,我们都会根据计算的优先级来计算,比如*/的优先级高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+,-和*)。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值是多少?

  • 输入描述
    输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9.

2、基本思想

(1)读取输入表达式,将字符串转化为字符数组;
(2)遍历字符数组,如果data[i]字符为+,-,*,则取前一个data[i-1]和后一个data[i+1]进行运算,这里需要注意char转化为int的ASCALL码变换,相差48;
(3)将运算后的结果赋值给data[i+1],再进行重复运算。

3、解决方案

import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        String s = sc.next();        int sum = 0;        char dataArray[] = s.toCharArray();        for(int i = 0;i < dataArray.length - 1;i ++){            switch(dataArray[i]) {                case '+':                    sum = dataArray[i-1] + dataArray[i+1]-96;                    dataArray[i+1] = (char) (sum+48);                    break;                case '-':                    sum = dataArray[i-1] - dataArray[i+1];                    dataArray[i+1] = (char) (sum+48);                    break;                case '*':                    sum = (dataArray[i-1]-48) * (dataArray[i+1]-48);                    dataArray[i+1] = (char) (sum+48);                    break;                default:                    break;            }        }        sc.close();        System.out.println(sum);    }}
0 0
原创粉丝点击