HDU-1237-簡易計算機
3832 ワード
たんじゅんけいさんき
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12457 Accepted Submission(s): 4096
Problem Description
+、-、*、/のみを含む非負の整数計算式を読み込み、その値を計算します.
Input
テスト入力には、各テスト・インスタンスが1行を占め、各行が200文字を超えず、整数と演算子の間にスペースで区切られたいくつかのテスト・インスタンスが含まれます.不正な式はありません.1行に0しかない場合は入力が終了し、対応する結果は出力されません.
Output
各テストケースに1行、すなわち式の値を小数点以下2桁まで出力します.
Sample Input
Sample Output
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12457 Accepted Submission(s): 4096
Problem Description
+、-、*、/のみを含む非負の整数計算式を読み込み、その値を計算します.
Input
テスト入力には、各テスト・インスタンスが1行を占め、各行が200文字を超えず、整数と演算子の間にスペースで区切られたいくつかのテスト・インスタンスが含まれます.不正な式はありません.1行に0しかない場合は入力が終了し、対応する結果は出力されません.
Output
各テストケースに1行、すなわち式の値を小数点以下2桁まで出力します.
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
, , ,。。
,,
。。
。。。 ,,, ,, ,,, ,, ,, ,,
, , , 。。
#include <stdio.h>
#include <string.h>
double num_stack[210];
char char_stack[210];
int top, ctop;
double Gettop()
{
return num_stack[top-1];
}
char Getctop()
{
return char_stack[ctop-1];
}
void Push_n(double a)
{
num_stack[top++]=a;
}
void Push_c(char ch)
{
char_stack[ctop++]=ch;
}
int main()
{
int i, num;
char a[210];
while(gets(a))
{
if(strlen(a)==1 && a[0]=='0')break;
int len=strlen(a);
top=0;ctop=0;
for(i=0; i<len; i++)
{
if(a[i]<='9' && a[i]>='0')
{
double k=a[i]-'0';
while(a[i+1]<='9' && a[i+1]>='0')
{
i++;
k=k*10+a[i]-'0';
}
Push_n(k);
}
else if((a[i]=='/'||a[i]=='*'||a[i]=='+'||a[i]=='-'))
{
if((a[i]=='*' || a[i]=='/'))
{
int m=i;
while(!(a[i]<='9' && a[i]>='0'))i++;
if(a[i]<='9' && a[i]>='0')
{
double k=a[i]-'0';
while(a[i+1]<='9' && a[i+1]>='0')
{
i++;
k=k*10+a[i]-'0';
}
Push_n(k);
}
if(a[m]=='*')
{
num_stack[top-2]=num_stack[top-2]*num_stack[top-1];
top--;
}
else if(a[m]=='/')
{
num_stack[top-2]=num_stack[top-2]/num_stack[top-1];
top--;
}
}
else
{
Push_c(a[i]);
}
}
}
int n=0;
for(int l=0; l<ctop; l++)
{
if(char_stack[l]=='+')
{
num_stack[n+1]=num_stack[n+1]+num_stack[n];
n++;
}
if(char_stack[l]=='-')
{
num_stack[n+1]=num_stack[n]-num_stack[n+1];
n++;
}
}
printf("%.2lf
", num_stack[n]);
}
return 0;
}