题目名称 627. [GZOI2011] 简易计算器
输入输出 calculator.in/out
难度等级 ★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 5
题目来源 Gravatarcqw 于2011-11-28加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:1, 提交:4, 通过率:25%
GravatarMakazeu 100 0.001 s 0.32 MiB C++
GravatarMakazeu 80 0.002 s 0.27 MiB C++
GravatarMakazeu 20 0.002 s 0.27 MiB C++
GravatarMakazeu 20 0.002 s 0.27 MiB C++
关于 简易计算器 的近10条评论(全部评论)

627. [GZOI2011] 简易计算器

★☆   输入文件:calculator.in   输出文件:calculator.out   简单对比
时间限制:1 s   内存限制:128 MiB
【问题描述】
相信大家都用过计算器,一般来说,计算机都可以计算简单的 加、减、乘、除这几种运算。简易计算器的功能和一般的计算器一样,只是它更加简单,只能处理整数运算,也就是说,它没有小数点按钮,并且它的除法运算是整除运算。
现在,我们给出简易计算器上的按钮序列,请你编程序,模拟简易计算器的功能,输出最终的结果。
【计算器组成】
简易计算器由以下按钮组成:
数字按钮: 0 1 2 3 4 5 6 7 8 9
运算按钮: + - * /
等于号按钮:=
正负转换按钮:+/-
为了表述方便,+/- 按钮用 F 表示 ,
【计算器逻辑处理】
计算器内存有3个值,M1,M2,OP,ST
M1为计算器的左运算值,初始值为0
M2为计算器的右运算值,初始值0
OP为计算器的当前运算符,初始值为空
ST为状态标记,初始值为0
状态装换逻辑如下:
ST=0(M1/OP输入态):
显示值:M1
输入数字N :
M1=N ,转 ST=1状态
输入F :
M1=-M1,转 ST=0状态
输入运算符:
OP=运算符,转ST=2状态
输入“=”:
转 ST=0状态
ST=1(M1+/OP输入态):
显示值:M1
输入数字N :
如果M1>=0则 M1=M1*10+N 否则M1=M1*10-N;
转 ST=1状态;
输入F :
M1=-M1,转 ST=1状态;
输入运算符:
OP=运算符,转ST=2状态
输入“=”:
转 ST=0状态
ST=2(OP/M2输入态):
显示值:M1
输入数字N:
M2=N,转ST=3状态;
输入F:
M2=0,转 ST=3状态;
输入运算符:
OP=运算符,转ST=2状态
输入“=”:
转 ST=0状态
ST=3(M2+/OP输入态):
显示值:M2
输入数字N:
如果M2>=0则 M2=M2*10+N 否则M2=M2*10-N;
转ST=3状态;
输入F:
M2=-M2,转 ST=3状态;
输入运算符:
M1=[M1][OP][M2] 的值
OP=运算符;
转ST=2状态
输入“=”: 转 ST=0状态
M1=[M1][OP][M2] 的值
转ST=0状态
【输入格式】
输入只有一行,表示在计算器输入的按钮,长度<=100,里面只包含如下字符 :
0123456789+-*/=F
输入数据保证不会出现除以0的 情况,运算过程中各个内存的值的范围在
[-10000000, 10000000] 以内
【输出格式】
输出包含一行整数,表示最后在计算器显示的结果
【输入样例】
123=*2F-+/3+-=
【输出样例】
-82