前缀式计算

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

先说明一下什么是中缀式:

如2+(3+4)*5这种我们最常见的式子就是中缀式。

而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))

然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )

把括号去掉就是:+ 2 * + 3 4 5

最后这个式子就是该表达式的前缀表示。

给你一个前缀表达式,请你计算出该前缀式的值。

比如:

+ 2 * + 3 4 5的值就是 37

 
输入
有多组测试数据,每组测试数据占一行,任意两个操作符之间,任意两个操作数之间,操作数与操作符之间都有一个空格。输入的两个操作数可能是小数,数据保证输入的数都是正数,并且都小于10,操作数数目不超过500。
以EOF为输入结束的标志。
输出
对每组数据,输出该前缀表达式的值。输出结果保留两位小数。
样例输入
  1. + 2 * + 3 4 5
  2. + 5.1 / 3 7
样例输出
  1. 37.00
  2. 5.53
  3.  
  4. 前缀式计算:从后往前遍历,遇到数字压入栈,遇到符号,弹出两个数字,计算
  1. (第一个操作数为先出栈的数),然后压入栈。
  2.  
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stack>
  4. using namespace std;
  5. double calPerfix(char *input)
  6. {
  7. stack<double> result;
  8. int len = strlen(input) - ;
  9. int n,j,i;
  10. while (len >= )
  11. {
  12. j = len;
  13. double sum = 0.0,dot = 0.0;
  14. if (len == ){
  15. j = ;
  16. n = j;
  17. }
  18. else {
  19. while (input[j] != ' ')
  20. j--;
  21. n = j+;
  22. }
  23. if (input[n] >= '' && input[n] <= ''){
  24. for (i=n; i <= len; i++)
  25. {
  26. if(input[i] >= '' && input[i] <= '')
  27. {
  28. double num = input[i] - '';
  29. sum = sum * + num;
  30. }
  31. else if (input[i] == '.')
  32. {
  33. int l = ;
  34. dot = 0.0;
  35. for (int k=i+; k <= len; k++ )
  36. {
  37. if(input[k] >= '' && input[k] <= '')
  38. {
  39. double num = input[k] - '';
  40. dot += num / l;
  41. l *= ;
  42. i++;
  43. }
  44. }
  45. }
  46. }
  47. sum += dot;
  48. result.push(sum);
  49. }
  50. else {
  51. double one;
  52. switch (input[n])
  53. {
  54. case '+':
  55. sum = result.top();
  56. result.pop();
  57. one = result.top();
  58. result.pop();
  59. sum += one;
  60. result.push(sum);
  61. break;
  62. case '-':
  63. sum = result.top();
  64. result.pop();
  65. one = result.top();
  66. result.pop();
  67. sum -= one;
  68. result.push(sum);
  69. break;
  70. case '*':
  71. sum = result.top();
  72. result.pop();
  73. one = result.top();
  74. result.pop();
  75. sum *= one;
  76. result.push(sum);
  77. break;
  78. case '/':
  79. sum = result.top();
  80. result.pop();
  81. one = result.top();
  82. result.pop();
  83. sum /= one;
  84. result.push(sum);
  85. break;
  86. default:
  87. break;
  88. }
  89. }
  90. len = j - ;
  91. }
  92. return result.top();
  93. }
  94. int main()
  95. {
  96. char input[];
  97. while(gets(input)){
  98. printf("%.2f\n",calPerfix(input));
  99. fflush(stdin);
  100. }
  101. return ;
  102. }

NYOJ 128 前缀式计算的更多相关文章

  1. NYOJ 128 前缀表达式的计算

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...

  2. NYOJ128前缀式计算

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...

  3. NYOJ128 前缀式计算 【栈】

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 先说明一下什么是中缀式: 如2+(3+4)*5这样的我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上 ...

  4. 前缀式计算 nyoj

    题目描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括号就是:(2+((3+4)*5)) 然后把运算符写到括号前面就是+(2 *( +(3 ...

  5. NYOJ128 前缀式计算(栈的运用)

    题目信息: http://acm.nyist.net/JudgeOnline/problem.php? pid=128 + 2 * + 3 4 5的值就是 37,详见输入输出. 输入 有多组測试数据, ...

  6. NYOJ--128--前缀式计算(表达式求值)

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...

  7. nyoj-----前缀式计算

    前缀式计算 时间限制:1000 ms  |           内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀 ...

  8. 搜索广告与广告网络Demand技术-流式计算平台

    流式计算平台-Storm 我们以Storm为例来看流式计算的功能是什么. 下面内容引用自大圆的博客.在Storm中,一个实时应用的计算任务被打包作为Topology发布,这同Hadoop的MapRed ...

  9. 流式计算与计算抽象化------《Designing Data-Intensive Applications》读书笔记15

    上篇的内容,我们探讨了分布式计算中的MapReduce与批处理.所以本篇我们将继续探索分布式计算优化的相关细节,并且分析MapReduce与批处理的局限性,看看流式计算是否能给我们在分布式计算层面提供 ...

随机推荐

  1. SpringMVC整合TaskExecutor线程池的配置/使用

    一.配置jdbc.properties添加: #------------ Task ------------ task.core_pool_size=5 task.max_pool_size=50 t ...

  2. bash正则表达式

    星号*: 匹配它前面的字符串或正则表达式任意次(包括0次). 比如:* 可能匹配的字符串有:... ...... 句号.: 匹配除换行符之外的任意一个字符. 比如:"112.",将 ...

  3. Android内存溢出解决方案(OOM)

    众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视平台而定).因此在开发应用时需要特别关注自身的内存使用量,而一般最耗内存量的资源,一般是图片.音频文 ...

  4. Linux用户组与用户组进阶命令

    1.用户锁定 : passwd -l user1 2.解除用户锁定:passwd -u user1 3.用户无密码登记:passwd -d user1 4.添加到附属用户组:gpasswd -a us ...

  5. ASP.NET生成缩略图的代码

    01.        // <summary> 02.        /// 生成缩略图 03.        /// </summary> 04.        /// &l ...

  6. Ibatis的简单介绍

    定义: 相对Hibernate和Apache OJB 等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现.以前ORM的框架(hibernate,ojb)的局限: 1. 系统的 ...

  7. hiho 第119周 最大权闭合子图

    描述 周末,小Hi和小Ho所在的班级决定举行一些班级建设活动. 根据周内的调查结果,小Hi和小Ho一共列出了N项不同的活动(编号1..N),第i项活动能够产生a[i]的活跃值. 班级一共有M名学生(编 ...

  8. grails-shiro权限认证

    一.引用shiro插件 //在BuildConfig的plugins下面添加 compile ":shiro:1.2.1" 二.引用新插件后要进行编译 //grails命令 com ...

  9. AB串(上帝都不会,我就没救了)

    [题目分析] 设答案的长度为m,

  10. program

    [题目分析] 题目的意思是在一个数列中找到四个数,a[i]=a[j]<a[k]=a[l],其他都扯淡. 先把这些数sort一下,所有相等的数字就都排在一起了,然后这个数列可以按照数字的种类划分成 ...