hdu 1237 Java 簡單計算器
簡單計算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15204 Accepted Submission(s): 5188
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中的集合,不怎麼會用
針對這題,數和符號分別用兩個集合裝,這題不僅僅只是用到集合中的棧,還用到佇列,當運算乘除法時候,用到的是棧(先算乘除兩邊的數,然後用結果取代數的位置,方便後面的加減法運算),加減法的時候用到的是佇列
(直接從頭到尾一起運算)
package cn.hncu.acm;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
public class p1237 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while(sc.hasNext()){
String a=sc.nextLine();
if(a.compareTo("0")==0){
break;
}
String ss=a.replaceAll(" ", ",");
String[] str=ss.split(",");
LinkedList<String > signlink=new LinkedList<String>();//用來放符號
LinkedList<Double> numlink=new LinkedList<Double>();//用來放數
double sum=0.0;
double sum1=0.0;
//從題目中知道輸入的數都是規則的,i是數,那麼i+2肯定是數。
for(int i=0;i<str.length;i++){
if((i+1)%2==0){//偶數都是符號
if(str[i].compareTo("*")==0){
sum=numlink.getLast()*Double.parseDouble(str[i+1]);
}else if(str[i].compareTo("/")==0){//要是字串為/,同樣的算出結果
sum=numlink.getLast()/Double.parseDouble(str[i+1]);
}else{
signlink.add(str[i]);//僅僅只是新增符號,就不用下面的新增
continue;
}
numlink.pollLast();//移除現在最後加進去的數,因為做了運算,應該用這個結果去代替
i=i+1;//因為當符合條件後,如 a*b+c,當i的位置知道*時候,把c也計算了,所以需要+1;
numlink.add(sum);
}else{
numlink.add(Double.parseDouble(str[i]));//第一個數不滿足就會放進數的佇列;
}
}
// for(int i=0;i<signlink.size();i++){
// if(str[i].compareTo("+")==0){
// sum1=(numlink.pollFirst()+Double.parseDouble(str[i+1]));
// i=i+1;
// }else{
// sum1=(numlink.pollFirst()-Double.parseDouble(str[i+1]));
// i=i+1;
// }
// i=i+1;
// numlink.add(sum1);
// }
//
// Iterator<Double> it =numlink.iterator();
// while(it.hasNext()){
// sum1=sum1+it.next();
// }
// System.out.println(sum1);
// }
sum1=numlink.pollFirst();
while(!signlink.isEmpty()){
String sign=signlink.pollFirst();
if(sign.compareTo("+")==0){
sum1+=numlink.pollFirst();
}else{
sum1-=numlink.pollFirst();
}
}
System.out.printf("%.2f",sum1);
System.out.println();
}
}
}
相關文章
- HDU_1237 一個簡單的計算器
- Java語言編寫計算器(簡單的計算器)Java
- java方法練習之簡單計算器Java
- 簡單版計算器
- MFC簡單計算器
- PHP簡單計算器PHP
- Java實現一個簡單的計算器Java
- JavaScript 簡單計算器效果JavaScript
- 用java實現一個簡單的計算器Java
- 簡單混合運算的計算器
- java 簡單工廠模式(實現一個計算器)Java模式
- PyQt4(簡單計算器)QT
- HDU 1466 計算直線的交點數(簡單dp)
- HDU 1077Catching Fish(簡單計算幾何)
- 簡單計算器(棧的應用)
- JavaScript簡單計算器程式碼分析JavaScript
- 一個最簡單的計算器
- 16_簡單計算器實現
- hdu 1326 java (理解起來很簡單)Java
- 7-20 簡單計算器 (20分)
- 【Flutter 實戰】簡約而不簡單的計算器Flutter
- Java 計算器Java
- IOS開發 製作簡單的計算器iOS
- Python編寫一個簡單計算器Python
- Java簡單四則運算Java
- Groovy簡單公式計算公式
- 教你python tkinter實現簡單計算器功能Python
- 1、簡單工廠模式實現計算器功能模式
- 簡單計算器 (關於棧的一種應用)
- 從0到1實現一個簡單計算器
- python簡易計算器Python
- hdu 3665Seaside(簡單floyd)IDE
- 用JS點選事件做一個簡單的計算器JS事件
- 利用ANTLR4實現一個簡單的四則運算計算器
- hdu5365 簡單幾何問題
- 0014---簡單的計算
- 2 簡單的計算機模型MARIE計算機模型
- python——設計一個簡單的購房商貸月供計算器Python