专栏文章
题解:AT_iroha2019_day3_k えそらんぐ
AT_iroha2019_day3_k题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mir1xkmb
- 此快照首次捕获于
- 2025/12/04 14:25 3 个月前
- 此快照最后确认于
- 2025/12/04 14:25 3 个月前
大模拟,个人感觉没有 struct 难(
一看题意,只有 8 种操作,前 6 种是移动指针、自增自减和输入输出。那么后 2 种就比较有用,相当于一个
while 循环,当然也可以当 if 用。乍一看根本不知道怎么用这东西实现加法,于是我们尝试使用封装思想,一步步建立这种语言的各种操作。
假设我们钦定每对
[] 之间的 < 与 > 数目相同,那么我们便可以知道在程序执行到任意位置时指针指向的内存编号。从实现来讲,我们存储全局变量 表示当前位置。
Access(x)
将指针指向 ,直接输出对应个
< 或 > 后更新 即可。Add(x,c)
将内存 加上 ,其中 是一个常量。
access 后直接输出
+ 或 - 即可。Read(x) / Write(x)
输出第 个内存的值,为了方便运算,我们输入时将其减去 (
0 的 ASCII 值),输出时加回去。access, add 后输出 , 或 . 即可Loop(x) / End()
我们定义
loop(x) ... end() 等价于 while(x) { ... },即调用 loop 就设置循环,调用 end 就标记循环停止,并且当 不为 时循环执行。那我们在
loop 时 access 到 ,然后输出 [ 开始循环;在 end 时再次 access 到 ,然后输出 ] 结束循环。Addto(x,S)
将 加到 中,并清空 。
直接用循环暴力自增自减即可。
到这里,我们已经实现了大部分一个语言具有的功能,甚至已经可以实现不进位加法。那么我们唯一需要处理的就是进位。
考虑什么时候需要进位,当且仅当两个相同数位上的和大于等于 10。
那我们如何判断呢?比较运算符不是很好写,但是我们只需检查当前的数是否在 之间即可,于是可以暴力枚举判断是否相等。
那么怎么判相等呢?容易发现我们可以判断他们的差是否为 ,于是就做完了。
细节见 code
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...