您有3個目錄。他們每個人都包含2個目錄。這些目錄中的每一個都包含1個目錄,而這些目錄都是空的。你有多少目錄?
我寫了一個JavaScript函數來解決它......
function catalogsNumber(c)
{
n = 0;
for (a = 0; a < c; a++) {
n = (n + 1) * (a + 1);
}
return n;
}
...它返回正確的結果:
// Results in JavaScript
catalogsNumber (3) => 15
catalogsNumber (4) => 64
catalogsNumber (5) => 325
catalogsNumber (12) => 1302061344
catalogsNumber (13) => 16926797485
catalogsNumber (14) => 236975164804
但是,當我試圖在C++一樣,函數每次返回奇怪的結果當c > 12
:
int catalogsNumber(int c)
{
int i, n = 0;
for (i = 0; i < c; i++) {
n = (n + 1) * (i + 1);
}
return n;
}
// Results in С++
catalogsNumber (3) => 15 // correct
catalogsNumber (4) => 64 // correct
catalogsNumber (5) => 325 // correct
catalogsNumber (12) => 1302061344 // correct
catalogsNumber (13) => -253071699 // ¯\_(ツ)_/¯
catalogsNumber (14) => 751963524 // ¯\_(ツ)_/¯
這樣的謎語,很神祕。爲什麼會發生?
嘗試在C++中將int更改爲long int。 – kometen
因爲結果大於int值,所以它會返回-xxxxxx。改爲長時間而不是 –
'長'不提供任何保證。在某些平臺上,long與int的寬度相同。使用'std :: int64_t'或'std :: uint64_t' – bolov