首页 > 学院 > 开发设计 > 正文

Hdu 1237

2019-11-11 05:27:24
字体:
来源:转载
供稿:网友

简单计算器

Time Limit: 2000/1000 MS (java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 19484 Accepted Submission(s): 6860

PRoblem Description

读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

Input

测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input

1 + 2 4 + 2 * 5 - 7 / 11 0

Sample Output

3.00 13.36

题解:栈原理。先处理乘除,再处理加减。

//Java代码import java.util.Scanner;public class Main { public static void main(String[] args) { double[] num = new double[201]; char[] sign = new char[201]; Scanner in = new Scanner(System.in); while(in.hasNextLine()){ String str = in.nextLine(); if(str.equals("0")) break; String[]strs = str.split(" "); int j = 0; int k = 0; //处理乘除 for(int i=0;i<strs.length;i++){ if(strs[i].equals("*") || strs[i].equals("/") || strs[i].equals("+") || strs[i].equals("-")){ switch(strs[i]){ case "+": sign[k++] = '+';break; case "-": sign[k++] = '-';break; case "*": num[j-1] = num[j-1]*Integer.valueOf(strs[i+1]); i++; break; case "/": num[j-1] = num[j-1]/Integer.valueOf(strs[i+1]); i++; break; } }else{ num[j++] = Integer.valueOf(strs[i]); } } int l = 0; double res = 0; //处理加减 for(int i=0;i<j;i++){ if(i==0){ res = num[i]; continue; } switch(sign[l]){ case '+': res += num[i]; l++; break; case '-': res -= num[i]; l++; break; } } System.out.println(String.format("%.2f", res)); //初始化数组 for(int i=0;i<num.length;i++){ num[i] = 0; sign[i] = ' '; } } }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表