使用增量,循环,赋值,零分割操作

use*_*475 7 algorithm math logic

我们只允许使用以下操作:

incr(x) - 调用此函数后,它会将x + 1分配给x

assign(x, y) - 此函数将y的值赋给x(x = y)

zero(x) - 此函数将0分配给x(x = 0)

loop X { } - 括号内的操作将执行X次

我该如何实施除法运算?

Aad*_*hah 3

虽然 Sarid 的答案是正确的,但可以floor(x / y)更有效地计算如下:

divide(x, y) {
    x = incr(x)

    z = 0

    loop x {
        x = sub(x, y)
        l = isTrue(x)
        z = add(z, l)
    }

    return z
}
Run Code Online (Sandbox Code Playgroud)

和函数之前已在这里定义addsub

仅使用增量、循环、赋值、零的减法运算

isTrue函数定义如下:

isTrue(x) {
    y = false
    loop x { y = true }
    return y
}
Run Code Online (Sandbox Code Playgroud)

请注意,我们之前定义了true和 ,false如下所示:

false = 0
true  = incr(false)
Run Code Online (Sandbox Code Playgroud)

这个函数的唯一问题是divide(n, 0)返回n + 1而不是错误。