0

我想检查两个数字相加时是否产生进位。我假设这两个数字都在 0-9 范围内。

我们的限制:

  1. 我们不能使用任何结果可能高于 9 或低于 0 的操作。
  2. 我们不能使用 0-9 范围之外的任何数字。
  3. 我们不能使用任何浮点运算或数字。

例如,我不能使用if (a+b > 9) then print("there is a carry."); as、as ifa=9b=6then a+b = 15。15 超出范围。

有什么有效的方法吗?如果有,请回答检查总和进位的有效方法。(请考虑上述约束)

4

4 回答 4

4
b = 9-b;
a = 0+a;
if (a > b) return true

我很确定这是你能得到的最有效的。

编辑:

第二行没有用,所以只有两行,没有循环,你就完成了。不过,我并没有删除原件,因为我认为我确实这样做很有趣。

于 2013-05-01T19:49:43.947 回答
1

在伪代码中

while a != 0
    if(b == 9) return true
    b++;
    a--;
end

return false;
于 2013-05-01T19:38:34.430 回答
1

这是一条规则

If a >= b and b >=5 then there is a carry
于 2013-05-01T19:38:52.193 回答
1

很好,@Tomcat 找到了这种模式,但有时蛮力还不错。如果输入是 [0,10] 范围内的整数,则可以创建一个 10*10 布尔查找表。用做单次减法来衡量差异会很有趣,尽管去查找表可能是毫无意义的优化,即使它有点快。

于 2013-05-01T19:39:54.107 回答