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

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值