首页 > 试题广场 >

奇怪的表达式求值

[编程题]奇怪的表达式求值
  • 热度指数:2591 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 *)。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少

输入描述:
输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9. 保证表达式都是合法的,排列规则如样例所示。


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

输入

3+5*7

输出

56
Scanner sc = new Scanner(System.in); System.out.println("请输入表达式"); String eqExp = sc.next(); eqExp = eqExp.trim(); int sum = 0; char lastExp = 0; for (int i = 0;i < eqExp.length();i++) {  if (i % 2 == 0) {  int num = Integer.parseInt(eqExp.substring(i,i+1));  if (i == 0 ) {
          sum += num; 
      continue; 
      }  if ('+' == lastExp) {
          sum += num; 
      } else if ('-' == lastExp) {
          sum -= num;
      } else if ('*' == lastExp) {
          sum *= num;    } else {
            System.out.println("表达式有误");  return;    }
     } else {
      lastExp = eqExp.charAt(i);    }
}
System.out.println(sum);

编辑于 2018-01-30 14:21:15 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args)
        {
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
       char []ch=s.toCharArray();
        int first=ch[0]-'0';
        int temp=0;
        for(int i=1;i<ch.length-1;i+=2){
            temp=ch[i+1]-'0';
            if(ch[i]=='+'){
                first=first+temp;
            }
            if(ch[i]=='*'){
               first=first*temp; 
            }
            if(ch[i]=='-'){
               first=first-temp; 
            }
        }
        System.out.println(first);
    }
}
发表于 2017-08-14 21:48:05 回复(0)
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-04-09 11:29:37 回复(1)