【发布时间】:2021-07-21 03:41:34
【问题描述】:
我正在编写一个程序来返回斐波那契数列中具有给定数字长度的第一个数字的索引。
将 n 附加到函数调用中的数字会导致以下结果:
let fibIdxByLength = (length) => {
let [ cur, next ] = [ 1n, 1n ];
let idx = 2n;
while (next < (10 ** (length - 1))) {
[ cur, next ] = [ next, cur + next ];
idx++;
}
return idx;
};
fibIdxByLength(2n) === 7n; // 1 1 2 3 5 8 13
fibIdxByLength(3n) === 12n; // 1 1 2 3 5 8 13 21 34 55 89 144
fibIdxByLength(10n) === 45n;
fibIdxByLength(16n) === 74n;
fibIdxByLength(100n) === 476n;
fibIdxByLength(10000n) === 4782n;
这导致:标识符直接在数字之后,程序将无法运行
我也尝试过使用 BigInt(),但它说 BigInt 未定义。
有什么想法吗?
【问题讨论】:
-
错误信息相当清楚。特别是如果你查一下。 BigInt 和普通数字不兼容
length - 1是不允许的操作。length - 1n是。您需要确保只对 BigInts 或普通数字进行操作,而不是两者的混合。 -
注解:为什么要反复重新计算
10**(length-1)?
标签: javascript bigint