题目代号:HDU 1237
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237
题目原文:
简单计算器
Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有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> # include <stdlib.h> # include <iostream> # include <fstream> # include <vector> # include <queue> # include <stack> # include <map> # include <math.h> # include <algorithm> using namespace std; # define pi acos(-1.0) # define mem(a,b) memset(a,b,sizeof(a)) # define FOR(i,a,n) for(int i=a; i<=n; ++i) # define For(i,n,a) for(int i=n; i>=a; --i) # define FO(i,a,n) for(int i=a; i<n; ++i) # define Fo(i,n,a) for(int i=n; i>a ;--i) typedef long long LL; typedef unsigned long long ULL; int main() { double num[205],n; char f; while(cin>>n) { mem(num,0); int sum=0; num[0]=n; if(getchar()=='\n'&&n==0)break;//cin忽略输入数据之前空格,但是后面的空格使用getchar忽略,同时可以判断是否换行结束 while(1) { cin>>f>>n; if(f=='*')num[sum]*=n; else if(f=='/')num[sum]/=n; else if(f=='+')num[++sum]=n; else num[++sum]=-n; if(getchar()=='\n')break; } n=0; for(int i=0;i<=sum;i++) n+=num[i]; printf("%.2lf\n",n); } return 0; }