时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:6725

解决:2454

题目描述:
    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
    测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出:
    对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
样例输入:
1 + 2
4 + 2 * 5 - 7 / 11
0
样例输出:
3.00
13.36
来源:
2006年浙江大学计算机及软件工程研究生机试真题

思路:

可以用动态规划的思路来做。保存两个数和中间的计算符,逐步向后推进即可。

据说用栈做这个题效果也不错。

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h> #define M 200 int isnumber(char c)
{
return ('0' <= c && c <= '9');
} double compute(double a, char op, double b)
{
switch(op)
{
case '+':
return a+b;
case '-':
return a-b;
case '*':
return a*b;
case '/':
return a/b;
}
} void combine(double *a, char *op, double *b, char opnew, double c)
{
if (opnew == '+' || opnew == '-')
{
*a = compute(*a, *op, *b);
*op = opnew;
*b = c;
}
else
*b = compute(*b, opnew, c);
} int main(void)
{
char s[M+1], tmp[M+1];
int i, j;
double a, b, c;
char op, opnew;
double res; while (gets(s))
{
if (strcmp(s, "0") == 0)
break; a = 0.0;
b = 0.0;
op = '+';
i = 0;
while (s[i])
{
if (i != 0)
{
i++;
opnew = s[i++];
i++;
}
else
opnew = '+';
j = 0;
while (isnumber(s[i]))
tmp[j++] = s[i++];
tmp[j] = '\0';
c = atoi(tmp);
combine(&a, &op, &b, opnew, c);
}
res = compute(a, op, b);
printf("%.2lf\n", res);
} return 0;
}
/**************************************************************
Problem: 1019
User: liangrx06
Language: C
Result: Accepted
Time:0 ms
Memory:912 kb
****************************************************************/

九度OJ 1019:简单计算器 (基础题、DP)的更多相关文章

  1. 九度OJ 1019 简单计算器 -- 2006年浙江大学计算机及软件工程研究生机试真题

    题目地址:http://ac.jobdu.com/problem.php?pid=1019 题目描述:     读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 输入: ...

  2. 九度OJ 1112:拦截导弹 (DP、最长下降子序列)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3124 解决:1525 题目描述: 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能 ...

  3. 九度OJ 1131:合唱队形 (DP、最长上升下降序列)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2865 解决:881 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. ...

  4. 九度OJ 1086:最小花费 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3960 解决:819 题目描述: 在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下 ...

  5. 九度OJ 1101:计算表达式 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4340 解决:1335 题目描述: 对于一个不存在括号的表达式进行计算 输入: 存在多种数据,每组数据一行,表达式不存在空格 输出: 输出结 ...

  6. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述:     省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...

  7. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  9. 【九度OJ】题目1026:又一版 A+B 解题报告

    [九度OJ]题目1026:又一版 A+B 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过 ...

随机推荐

  1. (11)centos之vim使用

    ZZ 保存并退出 :x 保存并退出 :q 不保存退出

  2. TCO 2015 Round 2A DIV1

    ModModMod 傻逼数论 题意: 这是一道卖萌的题..给你一个取模序列$m$,令$f(x)=(\cdots (x\ mod\ m[0])\ mod m[1])\mod m[2]\cdots $,问 ...

  3. java反射和代理

    这一篇我们说说反射和动态代理,为什么这两个要一起说呢?因为动态代理中会用到反射,而且java中反射的用处太多了,基本上无处不在,而且功能十分强大: 1.反射简介 反射是什么呢?一般都是很专业的说法:在 ...

  4. 微信工作汇报系统2——IOS原型设计

    上一篇博客:一款自动汇报工作的微信机器人 上一篇博客中说道,我打算自己做一款能自动汇报工作的微信机器人,可惜学识有限,最后不知道怎么实现让机器人学习我的文本说话,所以就一直耽搁了,见天又打开这个系列, ...

  5. oracle中的替换函数replace和translate函数

    .translate 语法:TRANSLATE(char, from, to) 用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串. 若from比to字符串长,那么在from中比 ...

  6. Linux下设置开机启动

    新配置了vsftpd 需要设置ftp开机启动,linux新手,还不是很熟悉linux下的操作! 查询后发现命令是: chkconfig vsftpd on chkconfig命令用于设置运行级别   ...

  7. EasyMvc入门教程-基本控件说明(2)定时器

    我们有时候希望系统能自动刷新后台数据或者做某个动作,那么定时器的作用就体现出来了. EasyMvc默认提供的服务器可以定时调前端方法与定时调后端方法,先看例子: 定时调客户端事件 实现代码: @Htm ...

  8. django中日志使用学习记录

    在setting中加入以下代码 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'verbose ...

  9. Octave入门基础

    Octave入门基础 一.简单介绍 1.1 Octave是什么? Octave是一款用于数值计算和画图的开源软件.和Matlab一样,Octave 尤其精于矩阵运算:求解联立方程组.计算矩阵特征值和特 ...

  10. VueJS渐进式JS框架中文学习

    官方网站:http://vuejs.org/ GitHub:https://github.com/vuejs/vue 中文学习地址:https://cn.vuejs.org/