使用循环和减法返回商和余数的除法?

Posted

技术标签:

【中文标题】使用循环和减法返回商和余数的除法?【英文标题】:Division returning quotient and remainder using a loop and subtraction? 【发布时间】:2017-10-14 20:48:17 【问题描述】:

我正在做考试练习,其中一个问题要求您创建一个名为 divide(a,b) 的函数,计算两个参数的商和余数并返回两个结果。您不能使用内置的除法运算符或模运算符,而必须使用循环来重复调用减法函数(在活动的上一步中创建的函数。我基本上已经弄清楚如何确定商和余数,但是我不知道如何只使用减法加法在循环中进行除法。这是我到目前为止的代码(注意:a/b 的输入是单独完成的,这只是函数):

def add(a,b):
    return(a + b)

def subtract(a,b):
    return(a - b)

def divide(a,b):
    c = 0
    d = 0
    while add(d, b) <= a:
        c = add(c, 1)
        d = add(d, b)

    sub = multiply(b,c)    
    rem = subtract(a,sub)

    return(c,rem)

tl;dr 如何改变我在 divide(a,b) 中的 while 循环以使用减法而不是除法?

【问题讨论】:

【参考方案1】:

好的,所以这里的关键是要认识到,商是你可以平均减去除数的次数,而余数是剩下的数。 所以:

def divide(a, b):
    quotient = 0
    while a>b:
        quotient = add(quotient, 1)
        a = subtract(a,b)
    return (quotient, a)

【讨论】:

谢谢!我想我以前做过类似的事情,但它不起作用,所以我放弃了它。另外,[quotient = 0:] 末尾的冒号是否应该存在?它对我来说显示为语法错误,但没有它,代码可以正常工作。 糟糕!那只是一个错字;)

以上是关于使用循环和减法返回商和余数的除法?的主要内容,如果未能解决你的问题,请参考以下文章

大整数的有底除法和欧几里得除法

同时除法和取余数?

Java - 在同一步骤中获得商和余数?

计算机原理 3.6 定点数除法

除法和取余的运算时间

数字集成电路设计---除法运算