编写一个程序,要求用户输入 2 个数字。然后,程序将第二个数除以第一个数的余数(模数)的结果显示在屏幕 (OUT) 上。例如,如果输入的第一个数字是 14,而输入的第二个数字是 5,那么程序将显示 4。
14 mod 5 = 14 - (2 * 5) = 14 - 10 = 4
14 mod 7 = 14 - (2 * 7) = 14 - 14 = 0
您可以假设输入的数字始终为正且大于 0。
嗨,这是我不知道如何开始这个问题/做的问题?
编写一个程序,要求用户输入 2 个数字。然后,程序将第二个数除以第一个数的余数(模数)的结果显示在屏幕 (OUT) 上。例如,如果输入的第一个数字是 14,而输入的第二个数字是 5,那么程序将显示 4。
14 mod 5 = 14 - (2 * 5) = 14 - 10 = 4
14 mod 7 = 14 - (2 * 7) = 14 - 14 = 0
您可以假设输入的数字始终为正且大于 0。
嗨,这是我不知道如何开始这个问题/做的问题?
这只是简单的算术 - 让x = m MOD n
你可以做到这一点:
x = m / n ; integer division (truncates)
x = x * n ; multiply back up to get exact multiple
x = m - x ; subtract to get remainder (modulus)
由于 Little Man 只有 ADD 和 SUB 算术指令,您需要从第一原理实现乘法和除法运算。
您可以通过从第一个数字中减去第二个数字直到得到一个负数来解决这个问题。这是一个工作版本:
INP
STA R0
INP
STA R1
LDA R0
L0 STA R0
SUB R1
BRP L0
LDA R0
OUT
HLT
R0 DAT
R1 DAT
你可以在这里看到这个工作:LMC 模拟器上的模运算。
在这里,您必须使用减法方法来解决这个除法问题。它完全可以解决您的问题,找到两个数除法的余数...
// PRODUCED BY JAMES KHANAL
INP //ask the user
BRZ QUIT // halt the execution if input zero
STA DIVIDEND // store in dividend variable
INP // input dividor
BRZ QUIT // halt the execution if input zero
STA DIVIDOR // store in divider variable
LDA DIVIDEND // load into acc
LOOP STA RESULT // store the temp result
LDA RESULT // load the result
SUB DIVIDOR // subtract the dividor to acc
BRP LOOP //loop if acc is positive or zero
LDA RESULT // load the result into acc
OUT // display the result
QUIT HLT // halt if brz
HLT // hlt the execution
DIVIDEND DAT //declare variable
DIVISOR DAT //declare variable
INP STA FIRST INP STA SECOND LOOPTOP LDA FIRST SUB SECOND STA FIRST BRP LOOPTOP ADD SECOND BRA ENDLOOP OUT ENDLOOP HLT FIRST DAT SECOND DAT
这是解决这个问题的低效方法!我刚刚创建了一个循环,从第一个变量中减去第二个直到它变为负数,然后我将第二个变量添加到它
一切以学校知识为基础