[编程题] 奇怪的表达式求值

本文介绍了一种简单的表达式求值算法实现方法,该算法适用于仅包含加、减、乘运算的算术表达式,并遵循从左到右的计算规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常规的表达式求值,我们都会根据计算的优先级来计算。比如/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 )。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少
输入描述:
输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9.
保证表达式都是合法的,排列规则如样例所示。

输出描述:
输出一个数,即表达式的值

输入例子1:
3+5*7

输出例子1:
56

解题思路

拆分字符串。


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        if (str == null || str.length() == 0) {
            System.out.println(0);
            return;
        }

        int index = 0;
        while (str.charAt(index) != '+' && str.charAt(index) != '-' && str.charAt(index) != '*') {
            index++;
        }
        long result = Integer.valueOf(str.substring(0, index));

        while (index < str.length()) {

            char operator = str.charAt(index);

            int start = ++index;
            while (index < str.length() && str.charAt(index) != '+' && str.charAt(index) != '-'
                    && str.charAt(index) != '*') {
                index++;
            }
            int num = Integer.valueOf(str.substring(start, index));

            switch (operator) {
            case '+':
                result += num;
                break;
            case '-':
                result -= num;
                break;
            case '*':
                result *= num;
                break;
            }
        }
        System.out.println(result);
    }
}

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] nums = str.split("\\+|-|\\*");

        int count = 0, index = 0;
        long result = Integer.valueOf(nums[0]);
        while (count < nums.length - 1) {
            while (str.charAt(index) != '+' && str.charAt(index) != '-' && str.charAt(index) != '*') {
                index++;
            }
            char operator = str.charAt(index);
            switch (operator) {
            case '+':
                result += Integer.valueOf(nums[count + 1]);
                break;
            case '-':
                result -= Integer.valueOf(nums[count + 1]);
                break;
            case '*':
                result *= Integer.valueOf(nums[count + 1]);
                break;
            }
            count++;
            index++;
        }
        System.out.println(result);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值