這是一個面試問題。 我們只有兩個構造如何只使用循環實現減法和增加
loop(a)
意味着循環一次。increment(a)
遞增。
因此實現A + B一個可以寫
loop(a) {inc(b)}
return b;
的問題是如何實現A-B。
這是一個面試問題。 我們只有兩個構造如何只使用循環實現減法和增加
loop(a)
意味着循環一次。increment(a)
遞增。因此實現A + B一個可以寫
loop(a) {inc(b)}
return b;
的問題是如何實現A-B。
如何;
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
如果a = 2,則打印0.您需要一個否定功能。 – 2012-03-14 12:45:37
贊成它會發言負數,但其儘可能接近你可以得到我認爲有沒有否定允許 – 2012-03-14 12:52:57
我們是尋找X,使A-B = X。換言之A = B + X
僞
INT x = 0的
WHILE(X < =一)做{
如果(B + X == a)破//滿足AB = X
X ++
}
取決於如果這個數字架構被稱爲:
你可以利用的x86/x64體系結構的「兩個恭維話」機制,
例如,如果簽訂的編號方案是循環等。
f(0 < x < 32768) = x
f(32769 < x < 65535) = x - 65536
然後你可以使用:
dec(a)
{
loop(65535 [= 2^16-1]) { inc(a) }
}
。
解決riddel作爲
(a-b)
{
loop(b) { dec(a) }
}
根據簽名方案的相加常數可以改變,同爲短,長,大的整數類型。
希望這是個好:) 好運。
我認爲,如果從迴路斷線是允許的,A-B可以以這種方式來完成:
c=0;
loop(a) {
if (a==b) break;
inc(c);
inc(b);
}
return c;
Ofcourse假設A> B。
但是,再次,你只能使用loop()和inc()。你不能使用==運算符。 – 2012-03-14 14:18:12
RESET B
INC B
LOOP A
{
INC D
LOOP B
{
RESET D
}
}
都能跟得上。我已經標記了面試問題。 – Neal 2012-03-14 11:26:18
我認爲這是不可能的;你需要一個否定或減量函數 – 2012-03-14 12:20:45
大概你有一些比較函數可用,是嗎?如果你的唯一構造確實是循環和增量,我認爲這是不可能的,但是通過分支你可以使它工作。 – 2012-03-14 12:57:09