【问题标题】:Regarding Little man computer remainder (modulus) of dividing numers关于小人电脑除数余数(模数)
【发布时间】:2014-04-02 10:04:59
【问题描述】:

编写一个程序,要求用户输入 2 个数字。然后,程序将第二个数除以第一个数的余数(模数)的结果显示在屏幕 (OUT) 上。例如,如果输入的第一个数字是 14,而输入的第二个数字是 5,那么程序将显示 4。

14 mod 5 = 14 - (2 * 5) = 14 - 10 = 4

14 mod 7 = 14 - (2 * 7) = 14 - 14 = 0

您可以假设输入的数字始终为正且大于 0。

您好,这是我不知道如何开始/做这个问题的问题?

【问题讨论】:

    标签: little-man-computer


    【解决方案1】:

    这只是简单的算术 - 要获得 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 算术指令,您需要根据第一原理实现乘法和除法运算。

    【讨论】:

    • 嗨,这意味着在小人电脑上使用小人电脑上使用的操作码来完成。你知道吗?
    • 当然——你有 ADD 和 SUB 算术指令,所以这应该是实现上述伪代码所需的全部内容。
    • 这实际上是我需要帮助的原因,因为我不知道以何种方式使用什么操作码,但我还是试试吧,谢谢。
    • 回想一下小学,你曾经是如何使用加减法手动进行长除法和长乘法的。
    • 不,我认为循环应该用于此,但我不确定:/
    【解决方案2】:

    您可以通过从第一个数字中减去第二个数字直到得到一个负数来解决这个问题。这是一个工作版本:

        INP
        STA R0
        INP
        STA R1
        LDA R0
    L0  STA R0
        SUB R1
        BRP L0
        LDA R0
        OUT
        HLT
    R0  DAT
    R1  DAT
    

    你可以在这里看到这个工作:Modulo operation on LMC emulator.

    【讨论】:

      【解决方案3】:

      我们开始了,您必须使用减法方法解决这个除法问题。它完全可以解决您的问题,找到两个数字除法的余数...

      // 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
      

      【讨论】:

      • 如果输入的被除数为0,不应该输出除数作为结果,而不是让程序停止吗?我同意第二个BRZ QUIT
      • 此外,如果问题没有说假设输入为正数/大于 0(在这种情况下不需要 BRZ 部分),此解决方案将适用。
      【解决方案4】:

      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

      这是解决这个问题的低效方法!! 我刚刚创建了一个循环,从第一个变量中减去第二个直到它变为负数,然后我将第二个变量添加到它

      一切以学校知识为基础

      【讨论】:

        猜你喜欢
        • 2020-07-22
        • 1970-01-01
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多