首页 > 代码库 > HDU 1237 简单计算器

HDU 1237 简单计算器

题目代号: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;
}

  

HDU 1237 简单计算器