简单计算器 HDOJ1237
输入:
1 + 2 4 + 2 * 5 - 7 / 11 0
输出:
3.00 13.36
本题容易理解 就是实现 加减乘数 格式如题所示
我们分析如下
- 当遇到乘除法时先算乘除
- 我们将乘除算完结果把结果还回去,将一个式子转化为加减法
- 最后得出结果
那么这里我用到了栈
用一个栈来存放数字与符号 , 让数字与符号一个一个进栈 , 当遇到 乘号 或 符号 出栈一个数字 与下个数字进行运算完 入栈
重复这个操作 , 最后栈中只剩下 加减运算 。 我们将栈中所有元素导出, (运算相反) 再进行反向运算 得到答案
下面是代码
package E;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
Stack<String> fu = new Stack<String>();
String str = sc.nextLine();
if(str.equals("0")) {
break;
}
String[] split = str.split(" ");
for (int i = 0; i < split.length; i++) {
if (split[i].equals(Character.toString('*')) || split[i].equals(Character.toString('/'))) {
String a = fu.pop();
String b = split[i + 1]; // 第二个数
if (split[i].equals(Character.toString('*'))) {
Double qwe = new Double(b);
Double qwe2 = new Double(a);
qwe = qwe * qwe2;
fu.add(qwe + "");
i = i + 1;
}
if (split[i].equals(Character.toString('/'))) {
Double qwe = new Double(b);
Double qwe2 = new Double(a);
qwe = qwe2 / qwe;
fu.add(qwe + "");
i = i + 1;
}
} else {
fu.add(split[i]);
}
}
String aaa[] = new String[fu.size()];
for (int i = 0; i < aaa.length; i++) {
aaa[i] = fu.pop();
}
Double sum = 0.0;
int er = 1;
for (int i = aaa.length - 1; i >= 0; i--) {
if (aaa[i].equals("+")) {
er = 1;
} else if (aaa[i].equals("-")) {
er = 2;
} else {
Double w = new Double(aaa[i]);
if (er == 1) {
sum = sum + w;
}
if (er == 2) {
sum = sum - w;
}
}
}
System.out.printf("%.2f",sum);
System.out.println();
}
}
}