HDOJ 1237題 簡單計算器
阿新 • • 發佈:2019-01-26
簡單計算器
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;
}