Vijos P1849 表达式求值【有限状态自动机】
来源:互联网 发布:淘宝二手手机可信吗 编辑:程序博客网 时间:2024/05/29 19:01
描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
格式
输入格式
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为 0 到 2 ^ 31 -1 之间的整数。输入数据保证这一行只有 0~ 9、+、*这 12 种字符。
输出格式
输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出。
样例1
样例输入1
1+1*3+4
样例输出1
8
样例2
样例输入2
1+1234567890*1
样例输出2
7891
样例3
样例输入3
1+1000000003*1
样例输出3
4
限制
每个测试点1s。
提示
样例解释:
样例 1 计算的结果为 8,直接输出 8。
样例 2 计算的结果为 1234567891,输出后 4 位,即 7891。
样例 3 计算的结果为 1000000004,输出后 4 位,即 4。
对于 30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;
对于 80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;
对于 100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。
来源
NOIP 2013 普及组
问题链接: Vijos P1849 表达式求值
问题分析:
表达式识别是计算机语言程序处理的基本问题。
简单的语法识别可以有限状态自动机来实现。这种方法机械有效,逻辑相对比较简单易懂。程序说明:
有关状态,参见程序代码注释。
题记:
语法识别是计算机科学的最基本的话题。
参考链接:(略)
AC的C++程序如下:
#include <iostream>#include <cstdio>using namespace std;/* * status=1 d * status=2 d+ or d* * status=3 d+d * status=4 d+d* * */const int MOD = 10000;int main(){ long long operand1, operand2, operand3, status; char op1, op2; scanf("%lld", &operand1); operand1 %= MOD; status = 1; for(;;) { if(status == 1) { scanf("%c", &op1); if(op1 == '+' || op1 == '*') status = 2; else break; } else if(status == 2) { scanf("%lld", &operand2); if(op1 == '*') { operand1 *= operand2; operand1 %= MOD; status = 1; } else if(op1 == '+') status = 3; } else if(status == 3) { scanf("%c", &op2); if(op2 == '*') status = 4; else if(op2 == '+') { operand1 += operand2; operand1 %= MOD; op1 = op2; status = 2; } else { operand1 += operand2; operand1 %= MOD; break; } } else if(status == 4) { scanf("%lld", &operand3); operand2 *= operand3; operand2 %= MOD; status = 3; } else break; } cout << operand1 << endl; return 0;}
0 0
- Vijos P1849 表达式求值【有限状态自动机】
- 有限状态自动机 正则表达式
- 有限状态自动机与正则表达式
- 确定有限状态自动机
- 有限状态自动机
- SCXML有限状态自动机
- 有限状态自动机
- 阿里云笔试题:正则表达式和有限状态自动机
- 将正则表达式转换为有限状态自动机
- 有限状态自动机的应用
- 算法 之 有限状态自动机
- Valid Number 有限状态自动机
- AC自动机(确定性有限状态自动机)
- 用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机
- 有限状态自动机FSM实现(一)
- 有限状态自动机(Finite state automon)
- Graphviz样例之有限状态自动机
- 字符串匹配算法之:有限状态自动机
- POJ
- python-24-如何派生类内置不可变类型并修改其实例化行为?如何为创建大量实例节省内存?
- java中的sleep()和wait()的区别
- 云服务器搭建git
- SPOJ 10606 Balanced Numbers 数位DP
- Vijos P1849 表达式求值【有限状态自动机】
- asp.net 中的相对路径
- C++实现改变网速*SpeedDuplex和网速监控
- Serialize and Deserialize Binary Tree
- jQuery的选择器
- 附件
- Linux下的OpenCV安装
- Java建立二叉排序树
- 2.3.1 Bee