HDU1237

简介: 简单计算器                   Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。   Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个 空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

简单计算器

                 

Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
 

Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个
空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
 

Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
 

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

Sample Output
 
     
3.00 13.36
 

Source



#include<cstdio>
#include<iostream>
#include<stack>
using namespace std;
int compare_opr[4][4]=
{
    0,0,-1,-1,
    0,0,-1,-1,
    1,1,0,0,
    1,1,0,0
};
int opr_tonum(char x)
{
    switch(x)
    {
    case '+':
        return 0;
        break;
    case '-':
        return 1;
        break;
    case '*':
        return 2;
        break;
    case '/':
        return 3;
        break;
    }

}
int isnum(char x)
{
    if(x>='0'&&x<='9')
        return 1;
    else   return 0;
}
int chartonum(char x)
{
    return x-'0';
}
void caculate( stack<double>&num_stack , stack<char>&opr_stack)
{
    double num_A,num_B;
    char temp;
    num_A=num_stack.top();
    num_stack.pop();
    num_B=num_stack.top();
    num_stack.pop();
    temp=opr_stack.top();
    opr_stack.pop();
    switch(opr_tonum(temp))
    {
    case 0:
        return num_stack.push(num_A+num_B) ;
        break;
    case 1:
        return num_stack.push(num_B-num_A)   ;
        break;
    case 2:
        return num_stack.push(num_A*num_B)   ;
        break;
    case 3:
        return num_stack.push(num_B/num_A)   ;
        break;
    }
}
int main()
{
    char str[205];
    while(cin.getline(str,205))
    {
        if(str[0]=='0'&&str[1]=='\0')
            break;
        else
        {
            int index=0;
            stack<char>opr_stack;
            stack<double>num_stack;
            while(str[index]!='\0')
            {
                if(str[index]==' ')
                {
                    index++;
                    continue;
                }
                else
                {
                    if(isnum(str[index]))
                    {
                        double num=0.0;
                        do
                        {
                            num*=10;
                            num +=chartonum(str[index]);
                            index++;
                        }
                        while(isnum(str[index]));
                        num_stack.push(num);
                    }
                    else
                    {
                        if(opr_stack.empty())
                        {
                            opr_stack.push(str[index]);
                            index++;
                            continue;
                        }
                        else
                        {
                            int i,j;
                            i=opr_tonum(str[index]);
                            j=opr_tonum(opr_stack.top());
                            switch(compare_opr[i][j])
                            {
                            case 1:
                                opr_stack.push(str[index]);
                                index++;
                                break;
                            case 0:
                            case -1:
                                caculate(num_stack,opr_stack);
                                break;
                            }
                        }
                    }
                }
            }
            while( !num_stack.empty() && !opr_stack.empty() )
                caculate( num_stack , opr_stack ) ;
            double Output ;
            Output = num_stack.top() ;
            printf("%.2f\n",Output);
        }
    }
    return 0;
}


 

目录
相关文章
|
Java 人工智能 Windows
|
Java BI
HDU 1412 {A} + {B}
{A} + {B} Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19833    Accepted Submission(s): 8245 Problem Description 给你两个集合,要求{A} + {B}.
810 0
|
算法 Java 文件存储
|
人工智能
HDU1106
为了给学弟学妹讲课,我又水了一题…… 1: import java.util.*; 2: import java.io.*; 3: 4: public class HDU1106 5: { 6: public static void main...
858 0
|
Java 测试技术
HDU 1847
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3204    Accepted Submission(s): 2008 Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此。
836 0
|
人工智能
hdu2084数塔
经典问题了,题意我就不叙述了(题目是中文的~) 分析:dp[i][j]表示在第i行第j个位置上能取得的最大和,那么要从最后一行开始算起,到塔顶结束:dp[i][j] = a[i][j]+max(dp[i+1][j], dp[i+1][j+1]), 边界条件是dp[n][j] = a[n][j]; ...
650 0
hdu 1754 I Hate It
点击打开链接hdu 1754 思路: 线段树+单点更新 分析: 1 线段树的水题 代码: /************************************************ * By: chenguolin ...
769 0