如何仅使用循环和增量来实现减法

时间:2012-03-14 11:08:08

标签: loops subtraction

这是一个面试问题。 我们只有两个结构

  1. loop(a)表示循环一次。
  2. increment(a)增加a。
  3. 因此,为了实现一个+ b,可以编写

    loop(a) {inc(b)} 
    return b;
    

    问题是如何实施a-b。

5 个答案:

答案 0 :(得分:11)

怎么样;

a = 10
b = 8
result = 0

loop(b) {
   last = 0
   times = 0;
   loop(a) {
      last = times
      times = inc(times)
   }
   result = a = last
}

result is 2

Js eg;

var a = 10;
var b = 8;
var result;

for (var _b = 0; _b < b; _b++) {
    var last = 0, times = 0, loopa = 0;
    for (var _a = 0; _a < a; _a++) {
        last = times;
        times = inc(times);
    }
    result = a = last;
}

function inc(i) {
    return i + 1;
}

print(result) // 2

答案 1 :(得分:3)

我认为如果允许从循环中断,可以用这种方式完成a-b:

c=0;
loop(a) {
    if (a==b) break;
    inc(c);
    inc(b);
}
return c;

当然假设a> b。

答案 2 :(得分:1)

取决于此数字架构是否已知:

您可以利用x86 / x64架构的“双重赞美”机制,

例如,如果签名编号方案是循环的,如。

f(0 < x < 32768)     = x
f(32769 < x < 65535) = x - 65536

然后你可以使用:

dec(a)
{
    loop(65535 [= 2^16-1]) { inc(a) }
}

解决了riddel as

(a-b)
{
   loop(b) { dec(a) }
}

根据Signed方案,加法常量可以改变,对于短,长,大整数类型也是如此。

希望这很好:) 祝你好运。

答案 3 :(得分:0)

我们正在寻找x,所以a-b = x。换句话说,a = b + x

伪代码

int x = 0

WHILE(x <= a)做{

if(b + x == a)BREAK //满足a-b = x

X ++

}

答案 4 :(得分:-1)

RESET B
INC B
LOOP A
{
    INC D
    LOOP B
    {
        RESET D
    }
}