刷到 LeetCode 的一道题目,发现 Number类型 的数字超过16位后,后面的数字全会变为 0
当我写出以下代码后,以为稳稳通过:
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
return ( parseInt( digits.join('') ) + 1 ).toString().split('');
};
结果:
之后才发现还存在 BigInt()
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
// 又试了一下使用 Number(),发现都没有作用
// return ( Number( digits.join('') ) + 1 ).toString().split('') --无法通过测试
// return ( parseInt( digits.join('') ) + 1 ).toString().split('') --无法通过测试
// 然后这是我重新自己写的方法 --可以通过测试
// var index = 0;
// var allNine = true;
// for(var i=digits.length-1; i>=0; i--){
// if(digits[i] != 9){
// digits[i] += 1;
// allNine = false;
// break;
// }else{
// digits[i] = 0;
// }
// }
// 判断所给数组是否全部都是 9
// if(allNine){
// digits.unshift(1)
// }
// 返回结果
// return digits;
// 不能写成 【BigInt( digits.join('') ) + 1】 否则会报错
return ( BigInt( digits.join('') ) + BigInt(1) ).toString().split('')
};