您有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