1. 程式人生 > >HDOJ 1237題 簡單計算器

HDOJ 1237題 簡單計算器

簡單計算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 15220 Accepted Submission(s): 5195

Problem Description
讀入一個只包含 +, -, *, / 的非負整數計算表示式,計算該表示式的值。

Input
測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用一個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。

Output
對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位。

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

Sample Output
3.00
13.36

聽說大部分人是用棧做的,可惜我現在還不太懂,所以就直接一個一個讀入陣列做了,開始的時候我出了一個小錯誤,就是那個0 + 0輸出應該是0,而我開始寫的判斷是直接結束了。
ac程式碼:(很容易理解吧)

#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char a;
    double s,a1,b[500];
    int i,j;
    while
(scanf("%lf",&a1)) { b[0]=a1; if(a1==0) { a=getchar(); if(a=='\n') break; } i=1; while(1) { a=getchar(); if(a=='+') { scanf("%lf",&b[i]); b[i]=b[i]; i++; } if
(a=='-') { scanf("%lf",&b[i]); b[i]=-b[i]; i++; } if(a=='/') { scanf("%lf",&b[i]); b[i]=b[i-1]/b[i]; b[i-1]=0; i++; } if(a=='*') { scanf("%lf",&b[i]); b[i]=b[i-1]*b[i]; b[i-1]=0; i++; } if(a=='\n') break; } s=0; for(j=0;j<i;j++) { s=s+b[j]; } printf("%0.2lf\n",s); } return 0; }