计算器(难度系数:3颗星)
题目描述:
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
测试输入包含若干测试用例,每个测试用例占一行,每行不超过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颗星)相关推荐
- 阿里巴巴难度系数五颗星的试题,小白竟然说很简单
牛客网上有道阿里巴巴的面试题,网站显示该题难度系数五颗星 原题 代码如下: public class Base {private String baseName = "base"; ...
- 正整数表示为连续自然数的和(难度:1颗星)
问题描述: 输入一个正整数N,输出能相加等于N的联系序列的和(序列必须多于1项),如果这种序列存在,则输出所有这样的序列,如果不存在,则输出NULL. 例如:输入为15 输出: 1+2+3+4+5=1 ...
- 哥德巴赫猜想(难度:1颗星)
问题描述: 哥德巴赫猜想的一种描述是,大于4的正偶数(我们假定1不是质数)都能分解成两个质数之和,我们假设这个猜想成立,我们现在输入一个大于4的正偶数N,输出所有能够满足哥德巴赫猜想的等式.(其中N的 ...
- 自守数(难度:半颗星)
问题描述: 如果一个数n是一个自守数,它必须满足如下条件: 1. 如果n有k位数构成,那么n的平方的末尾k位数必须和n相等 例如: 25是一个自守数,因为 25 * 25 = 625,并且25等于62 ...
- 求a的b次幂的最后3位(难度:1颗星)
问题描述: 输入a,b,其中a和b的范围是[2,999999999],求出a的b次幂的最后3位. PS: 如果最后三位是001,那么输出1就可以了. 问题分析: 这个问题的实际上是求a的b次幂mod ...
- 打渔晒网问题(难度:1颗星)
问题描述: 如果1个渔夫从2011年1月1日开始每3天打一次渔,两天晒一次网,编程实现当输入2011年1月1日之后的任意1天,输出该渔夫是在打渔还是在晒网. 输入样例 2011 5 5 输出样例 晒网 ...
- 亲密数对(难度:半颗星)
问题描述: 输出[1,100000]范围内的错有亲密数对. 如果说n和m是一个亲密数对,那么它们必须满足以下条件 1. n的全部因子之和(不包括n)必须等于m 2. m的全部因子之和(不包括m)必须等 ...
- 2020年社会工作师考试难度系数解读
随着"社工师需持证上岗"的要求,社会工作者考试报考人数每年呈井喷式增长,报考人数激增的同时,通过率也成为考生关注的话题.2008-2019这12年时间,社工考试通过率约19%,20 ...
- java定义文章的难度系数
本文定义文章的难度系数为:平均句长难度系数+常用字难度系数. 思路: (1)统计文章中.!?的数量来确定句子数,句子数除以总字符数即为平均句长,即可得到一个测评标准(句长): (2)保存一个常用500 ...
- P2770【USACO 2014 January Gold】难度系数
问题描述 奶牛冬奥会的越野滑雪场可以被看做是一个M x N(1 <= M,N <= 500)的网格区域.其中每格都有一个海拔高度(海拔高度的范围:0 .. 1,000,000,000). ...
最新文章
- Ubuntu12.04下tomcat的安装与配置
- html 后台参数attribute_平台管理后台与商家菜单资源管理:商家权限及其菜单资源管理设计...
- SpringBoot-14-MyBatis预热篇,MySQL小结
- 读取properties文件
- win10 mysql5.5无响应_Win10安装mysql5.5安装最后一步停住卡死未响应的解决方法
- 卡尔曼滤波器算法(Kalman Filter)—— 数学推导,图文并茂
- hive分隔符_HIVE-默认分隔符的(linux系统的特殊字符)查看,输入和修改
- leetcode1039. 多边形三角剖分的最低得分(动态规划)
- 关于DataAdapter打开和关闭连接
- 图论 —— 图的遍历 —— 欧拉通路与欧拉回路问题
- 开始使用 Markdown
- [LeetCode][JavaScript]Palindrome Linked List
- 712. Minimum ASCII Delete Sum for Two Strings
- 基因学:大数据的大希望
- 谷歌云盘超大文件快速下载方法
- 预警:Mac木马出新招,利用俄罗斯太空计划作诱饵
- Win10重装系统后,Microsoft账号无法登录,提示“发生了错误”,以及输入账户密码后,显示白屏问题的解决方案
- unrecognized selector sent to instance XXXXX
- C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)
- Python数据分析与机器学习47-维基百科词条EDA