繰り返し減算による除算を行うことで、奇数と偶数を区別することができます。
一般に、数値は2で割り切れる場合であっても、2で除算の残りがゼロである場合にはより実用的な意味でです。 によって、我々は単にBからを引くと、bたての更新未満なるまで繰り返すことができをBを分割する
。
我々はループ回数がBに残された値は、リマインダーB modの数B/されています。
私たちは後者に興味があるので、反復回数は数えません。
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
数だった場合ループで行わ同じ計算であるので、我々はb = b + 2
が原因でループBからの出口で必要とされ、完全に
Input b
Do
b = b - 2
Loop While b >= 0
b = b + 2
Output 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
通常プログラマは、(2 は、2つの唯一の奇数のパワーである、すなわちこと)ベースの2つのプロパティを活用しかし、それは少なくとも2進数字に抽出するためのAND演算またはSHIFT演算を必要とする。
LMCはどちらも持っていませんし、2進数でもネイティブに動作しません。したがって、私たちは部門をエミュレートする必要があります。
ありがとうございますが、私はまだ正しいコードを探しています。 :c –
@larctinmartdayos私のポイントは明らかです:これはコーディングサービスではなく、あなたは宿題をするときには決してチートをしてはいけません。私の答えは、LMCコードでは、それは通常許容されるさらに多くです。 –