题目1019:简单计算器

题目1019:简单计算器

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:10392

解决:3807

题目描述:
    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
    测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出:
    对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
样例输入:
1 + 2
4 + 2 * 5 - 7 / 11
0
样例输出:
3.00
13.36
分析:这个用一个数组不断更新值的方式。。我本来是一看到数学运算就想到用栈的思想去解决问题。。方法比较巧妙。。。。特别是不断判断是否是最后一个字符的时候,读入的时候,磨叽了好一会。。。。。。还有个switch判断,基础知识都忘了。。。没加break,导致结果一直不对。。。。心塞。。
#include <stdio.h>
#include <iostream>
//#include <stack>
#include <string.h>
#include <queue>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
#include <string>
using namespace std;
typedef long long LL;
#define MAX 1000

double arr[MAX];
int main() {
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    int a;
    while(scanf("%d",&a) != EOF) {
        if(a == 0){
            break;
        }
        getchar();
        int index = 0;
        arr[++index] = 1.0  * a;
        char c1, oper;
        int b;
        while(scanf("%c %d%c", &oper, &b, &c1) != EOF){
            switch(oper)
            {
                case '+' : arr[++index] = 1.0 * b;  break;
                case '-' : arr[++index] = -1.0 * b;    break;
                case '*' : arr[index] = arr[index] * b; break;
                case '/' : arr[index] = arr[index] / (double)b;
            }
            if(c1 != ' '){
                break;
            }
        }
        double ans = 0;
        for(int i = 1; i <= index; i++){
            ans += arr[i];
        }
        printf("%.2lf\n", ans);
 
 
    }
 
    return 0;
}
 
 
/**************************************************************
    Problem: 1019
    User: Crazy_man
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:1528 kb
****************************************************************/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值