我在学习中需要帮助,如果数字是偶数则可以显示1,如果数字是奇数则可以显示0。例如,如果输入为99,它将显示输出1,这意味着奇数。如果我显示10,它将显示输出0,这意味着均匀。
我没有代码,因为我不知道如何开始抱歉:C 请帮忙。我是这种东西的新手。
答案 0 :(得分:3)
通过重复减法进行除法可以区分奇数和偶数 一般来说,一个数字即使可被2整除,或者如果除以2的其余部分为0 1 ,则更实用。
要通过 a 划分 b ,我们只需从 b 中减去 a 并重复直到新近更新< em> b 小于 a
我们循环的次数是 b / a , b 中剩下的值是提醒 b mod a 。
我们对后者感兴趣,所以我们不会计算迭代次数。
Input b
While b >= 2 Do
b = b - 2
End While
If b == 0 Then
Output 1;
Else
Output 0;
End If
不幸的是,LMC没有与立即指令进行比较
这不是问题,因为我们可以将b >= 2
重写为b - 2 >= 0
,这更接近LMC所能做的事情。
但b - 2
与循环中完成的计算相同,因此我们可以完全重用
Input b
Do
b = b - 2
Loop While b >= 0
b = b + 2
Output b
需要b = b + 2
因为从循环b退出是负数,它是-1(如果数字是奇数)或-2(如果数字是偶数)。
这就是我在循环条件中添加等号的原因
通过添加2,我们可以直接输出b。
上面的算法计算你的问题的补码,它为偶数输出0,为奇数输出1 我默默地添加了这个“扭曲”,这样一个愚蠢的复制粘贴会伤害你。
因为它是一个家庭作业,所以我要把输出反转给你自己。
代码如下,隐藏。
请注意,此代码无法解决原始练习,因为它会使您获得零。
INP ;ACC = Number from user sub2_loop SUB two ;ACC = ACC - 2 BRP sub2_loop ;If ACC >= 0, keep subtracting 2 ;ACC < 0, since we were subtracting 2 ACC can only be -1 or -2 ADD two ;Set ACC = 1 or 0 end OUT ;Show ACC HLT two DAT 2
1 通常程序员利用基本的两个属性(即2 0 是两个中唯一的奇数幂),但这需要AND或SHIFT操作提取到最小二进制数字 LMC既没有,也没有本身使用二进制数,所以我们需要模拟一个部门。
答案 1 :(得分:1)
玛格丽特的答案期望当负标志由先前的2减法设置时,累加器具有一个确定的值。或者至少加2会使累加器返回其先前状态。
在某些实现中这可能是正确的,但不能保证。从理论上讲,LMC仅处理非负数,而负的唯一概念是“负”标志。 Wikipedia警告说,减法导致负数端溢出后,累加器的值未定义。
例如,有一个LMC的this implementation,无论溢出量是多少,累加器都将被设置为-1,因此此时奇数和偶数之间的区别就消失了。许多人会认为这是一个非常奇怪的实现,但是它符合LMC规范。
这是一个没有超出LMC规范的假设的版本:
#input: 9
INP
loop STA result
SUB two
BRP loop
LDA result ; restore value from before subtraction
OUT
HLT
two DAT 2
result DAT
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.7/lmc.js"></script>
答案 2 :(得分:0)
AND
?AND
这很棘手。在算法级别上,您似乎必须循环减少输入数字一到零,并且每次迭代都进行result = 1 - result
。最后,您将得到一个或零个结果(取决于result
的初始值(0
或1
,您决定),以及输入数字的奇数)。< / p>
现在你必须为LMC写这个,我现在不打算学习它。 如果你完全迷失了,请阅读维基页面,找出一些模拟器,在其中运行一些示例代码,并按指令学习它,它做什么,试图找出原因。然后尝试更多的例子,看看它们是如何工作的,然后回到我写的算法,并尝试自己编写。
(如果仍然丢失,你应该对每个点都有一个特定的问题,这将更容易回答,其中一些非常适合SO ..你的原始问题看起来有点过于宽泛和缺乏,我排序很奇怪你还没有被投票,并且已经等待了#34;)。
编辑(为了好玩):
r=r-1
是一种在只有减法时在0
和1
之间翻转的方法。通常CPU也有xor
和not
指令使操作更简单(从逐位汇编程序员的角度来看),但我倾向于使用Java中的r = r-1来使其更容易阅读我的同事一直忘记xor
,然后他们对r^=1
感到困惑;