开发者社区> JKXQJ> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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;
}


 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
HDU1862
中文题,题意挺好理解,不过多赘述。
930 0
hdu 3724 Encoded Barcodes
点击打开链接hdu 3742 思路:字典树 分析: 1 题目给定n个单词,有m次的询问。每一次的询问会有k个长度为8的条形码,条形码是8个double组成。
678 0
hdu 1712 ACboy needs your help
ACboy这学期有N门课程,他计划花最多M天去学习去学习这些课程,ACboy再第i天学习第j门课程的收益是不同的,求ACboy能获得的最大收益。
0 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]; ...
439 0
+关注
JKXQJ
好好学习,天天向上
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载