题目描述:

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

输入:

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

输出:

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

输入样例:

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

输出样例:

3.00
13.36

参考代码:

#include <stdio.h>
#include <stdlib.h>char exp[200];
int pos;
double GetResult();
double GetMultiplyAndDivideResult();
double GetOperatorNum();double GetResult()
{double opnum, rtn = GetMultiplyAndDivideResult();char op;while (exp[pos] == '+' || exp[pos] == '-'){op = exp[pos++];opnum = GetMultiplyAndDivideResult();if (op == '+')rtn += opnum;elsertn -= opnum;}return rtn;
}
double GetMultiplyAndDivideResult()
{double opnum, rtn = GetOperatorNum();char op;while (exp[pos] == '*' || exp[pos] == '/'){op = exp[pos++];opnum = GetOperatorNum();if (op == '*')rtn *= opnum;elsertn /= opnum;}return rtn;
}double GetOperatorNum()
{double ret;if (exp[pos] == '('){pos++;ret = GetResult();pos++;return ret;}ret = atoi(exp + pos);while (isdigit(exp[pos]))pos++;return ret;
}int IsValidChar(char ch)
{if (ch >= '0' && ch <= '9')return 1;if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')')return 1;return 0;
}void EraseNoUseChar(char* exp)
{char temp[200] = { 0 };int i, nIndex = 0, nLen = (int)strlen(exp);for (i = 0; i < nLen; i++){if (IsValidChar(exp[i]))temp[nIndex++] = exp[i];}strcpy(exp, temp);
}int main()
{while (1){pos = 0;gets_s(exp, 200);if (0 == strcmp(exp, "0"))break;EraseNoUseChar(exp);printf("%.2lf\n", GetResult());}return 0;
}

计算器(难度系数:3颗星)相关推荐

  1. 阿里巴巴难度系数五颗星的试题,小白竟然说很简单

    牛客网上有道阿里巴巴的面试题,网站显示该题难度系数五颗星 原题 代码如下: public class Base {private String baseName = "base"; ...

  2. 正整数表示为连续自然数的和(难度:1颗星)

    问题描述: 输入一个正整数N,输出能相加等于N的联系序列的和(序列必须多于1项),如果这种序列存在,则输出所有这样的序列,如果不存在,则输出NULL. 例如:输入为15 输出: 1+2+3+4+5=1 ...

  3. 哥德巴赫猜想(难度:1颗星)

    问题描述: 哥德巴赫猜想的一种描述是,大于4的正偶数(我们假定1不是质数)都能分解成两个质数之和,我们假设这个猜想成立,我们现在输入一个大于4的正偶数N,输出所有能够满足哥德巴赫猜想的等式.(其中N的 ...

  4. 自守数(难度:半颗星)

    问题描述: 如果一个数n是一个自守数,它必须满足如下条件: 1. 如果n有k位数构成,那么n的平方的末尾k位数必须和n相等 例如: 25是一个自守数,因为 25 * 25 = 625,并且25等于62 ...

  5. 求a的b次幂的最后3位(难度:1颗星)

    问题描述: 输入a,b,其中a和b的范围是[2,999999999],求出a的b次幂的最后3位. PS: 如果最后三位是001,那么输出1就可以了. 问题分析: 这个问题的实际上是求a的b次幂mod ...

  6. 打渔晒网问题(难度:1颗星)

    问题描述: 如果1个渔夫从2011年1月1日开始每3天打一次渔,两天晒一次网,编程实现当输入2011年1月1日之后的任意1天,输出该渔夫是在打渔还是在晒网. 输入样例 2011 5 5 输出样例 晒网 ...

  7. 亲密数对(难度:半颗星)

    问题描述: 输出[1,100000]范围内的错有亲密数对. 如果说n和m是一个亲密数对,那么它们必须满足以下条件 1. n的全部因子之和(不包括n)必须等于m 2. m的全部因子之和(不包括m)必须等 ...

  8. 2020年社会工作师考试难度系数解读

    随着"社工师需持证上岗"的要求,社会工作者考试报考人数每年呈井喷式增长,报考人数激增的同时,通过率也成为考生关注的话题.2008-2019这12年时间,社工考试通过率约19%,20 ...

  9. java定义文章的难度系数

    本文定义文章的难度系数为:平均句长难度系数+常用字难度系数. 思路: (1)统计文章中.!?的数量来确定句子数,句子数除以总字符数即为平均句长,即可得到一个测评标准(句长): (2)保存一个常用500 ...

  10. P2770【USACO 2014 January Gold】难度系数

    问题描述 奶牛冬奥会的越野滑雪场可以被看做是一个M x N(1 <= M,N <= 500)的网格区域.其中每格都有一个海拔高度(海拔高度的范围:0 .. 1,000,000,000). ...

最新文章

  1. Ubuntu12.04下tomcat的安装与配置
  2. html 后台参数attribute_平台管理后台与商家菜单资源管理:商家权限及其菜单资源管理设计...
  3. SpringBoot-14-MyBatis预热篇,MySQL小结
  4. 读取properties文件
  5. win10 mysql5.5无响应_Win10安装mysql5.5安装最后一步停住卡死未响应的解决方法
  6. 卡尔曼滤波器算法(Kalman Filter)—— 数学推导,图文并茂
  7. hive分隔符_HIVE-默认分隔符的(linux系统的特殊字符)查看,输入和修改
  8. leetcode1039. 多边形三角剖分的最低得分(动态规划)
  9. 关于DataAdapter打开和关闭连接
  10. 图论 —— 图的遍历 —— 欧拉通路与欧拉回路问题
  11. 开始使用 Markdown
  12. [LeetCode][JavaScript]Palindrome Linked List
  13. 712. Minimum ASCII Delete Sum for Two Strings
  14. 基因学:大数据的大希望
  15. 谷歌云盘超大文件快速下载方法
  16. 预警:Mac木马出新招,利用俄罗斯太空计划作诱饵
  17. Win10重装系统后,Microsoft账号无法登录,提示“发生了错误”,以及输入账户密码后,显示白屏问题的解决方案
  18. unrecognized selector sent to instance XXXXX
  19. C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)
  20. Python数据分析与机器学习47-维基百科词条EDA

热门文章

  1. signal函数原型解读
  2. Linux - 可视化菜单界面设计
  3. 支付宝转账银行卡收款二维码制作教程
  4. C#支持正负数的数字正则验证表达式
  5. 圣思园——Java SE Lesson 6
  6. PHP 函数、类声明和调用
  7. MySQL中IN对NULL的处理
  8. 实体字段校验@NotNull、@NotEmpty、@NotBlank
  9. BeautifulSoup的高级应用 之 find findAll
  10. resetFields方法重置表单