nyist 128 前缀式计算
来源:互联网 发布:java得到项目路径 编辑:程序博客网 时间:2024/05/18 01:48
先说明一下什么是中缀式:
如2+(3+4)*5这种我们最常见的式子就是中缀式。
而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))
然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )
把括号去掉就是:+ 2 * + 3 4 5
最后这个式子就是该表达式的前缀表示。
给你一个前缀表达式,请你计算出该前缀式的值。
比如:
+ 2 * + 3 4 5的值就是 37
- 输入
- 有多组测试数据,每组测试数据占一行,任意两个操作符之间,任意两个操作数之间,操作数与操作符之间都有一个空格。输入的两个操作数可能是小数,数据保证输入的数都是正数,并且都小于10,操作数数目不超过500。
以EOF为输入结束的标志。 - 输出
- 对每组数据,输出该前缀表达式的值。输出结果保留两位小数。
- 样例输入
+ 2 * + 3 4 5+ 5.1 / 3 7
- 样例输出
37.005.53
不得不说这题我想的比较难了,花了好长时间才出来,心塞,我估计是受其他题思路的影响
#include<stdio.h>#include<bits/stdc++.h>using namespace std;char str[2000];int len;int cf(int x,int y){ int s=1; while(y--) s*=x; return s;}void Calculate(){ double sum,sum1,sum2; stack<double>mm; int i; i=len-1; while(i>=0) { if(str[i]=='+') { double r=mm.top(); mm.pop(); double l=mm.top(); mm.pop(); double result=l+r; mm.push(result); } else if(str[i]=='-') { double r=mm.top(); mm.pop(); double l=mm.top(); mm.pop(); double result=r-l; mm.push(result); } else if(str[i]=='*') { double r=mm.top(); mm.pop(); double l=mm.top(); mm.pop(); double result=l*r; mm.push(result); } else if(str[i]=='/') { double r=mm.top(); mm.pop(); double l=mm.top(); mm.pop(); double result=r/l; mm.push(result); } else if(str[i]==' ') { i--; continue; } else { sum=0; sum1=0; sum2=0; double f=0; while(str[i]>='0'&&str[i]<='9') { i--; } int point_i=i; i++; while(str[i]>='0'&&str[i]<='9') { f=f+1; sum1+=(str[i]-'0')*(1.0/(pow(10,f))); i++; } i=point_i; if(str[i]=='.') { i--; while(str[i]>='0'&&str[i]<='9') { sum2=str[i]-'0'; i--; } sum=sum1+sum2; } else { sum=sum1*10; } mm.push(sum); } i--; } printf("%.2lf\n",mm.top());}int main(){ while(gets(str)) { len=strlen(str); Calculate(); } return 0;}
0 0
- nyist 128 前缀式计算
- http://acm.nyist.net/JudgeOnline/problem.php?pid=128&前缀式计算
- http://acm.nyist.net/JudgeOnline/problem.php?pid=128&&前缀式计算
- 【前缀式计算 128】
- nyoj 128 前缀式计算
- NYOJ 128 前缀式计算
- NYOJ 128 前缀式计算
- nyoj 128 前缀式计算
- 前缀式计算(nyoj 128)
- NYOJ 128 前缀式计算
- nyoj 128 前缀式计算
- NYOJ 128 前缀式计算
- nyoj 128 前缀式计算
- nyoj-128 前缀式计算
- NYOJ 128 前缀式计算
- NYOJ-128-前缀式计算
- NYOJ 128 前缀式计算
- NYOJ 128 前缀式计算
- 字符编码和数据类型笔记
- Office 365 开发与实践 (一) 基本服务介绍
- java基础--17 自定义的RandomUtils类--用于产生各种随机串的工具类
- Servlet案例五
- java内存布局与GC
- nyist 128 前缀式计算
- 冒泡排序算法的改进
- 基数排序与计数排序
- Servlet案例六
- hdu 5927 Auxiliary Set
- 数据结构学习笔记--栈
- 微信小程序入门基础(2)—视图层
- 详解堆栈的几种实现方法——C语言版
- currenthashmap