JavaScript对大整数求和
在JavaScript中,我希望使用以下方法创建大型布尔数组(54个元素)的二进制哈希:JavaScript对大整数求和,javascript,biginteger,Javascript,Biginteger,在JavaScript中,我希望使用以下方法创建大型布尔数组(54个元素)的二进制哈希: function bhash(arr) { for (var i = 0, L = arr.length, sum = 0; i < L; sum += Math.pow(2,i)*arr[i++]); return sum; } 在javascript中有没有办法用整数代替浮点数?还是大整数求和?可以通过谷歌搜索找到各种大整数Javascript库。e、 g.否。Javascript
function bhash(arr) {
for (var i = 0, L = arr.length, sum = 0; i < L; sum += Math.pow(2,i)*arr[i++]);
return sum;
}
在javascript中有没有办法用整数代替浮点数?还是大整数求和?可以通过谷歌搜索找到各种大整数Javascript库。e、 g.否。Javascript只有一种数字类型。您必须自己编写代码或使用大型整数库(甚至不能重载算术运算符) 更新
2010年也是如此。。。现在(2019年),一个BigInt库正在标准化,很可能很快就会以Javascript的形式出现,并且它将是第二个出现的数字类型(有类型化数组,但至少在形式上,从中提取的值仍然是双精度浮点数)。Javascript在内部使用浮点数 换句话说,你不能使用超过53位。在某些实现中,您可能被限制为31
尝试将位存储在多个变量中、使用字符串或获取a,或者如果只需要处理整数,则获取a。您的系统可能会遇到字节长度限制。我将布尔数组转换成二进制数字数组([true,false,true]=>[1,0,1]),然后将这个数组连接成一个字符串“101”,然后使用parseInt('101',2),你就可以得到答案了。
它用于实现常见的四个运算+-*/、模(%)和四个内置函数:平方根(sqrt)、幂(pow)、递归阶乘(fact)和记忆斐波那契(fibo)。大整数算法的另一个实现(也使用BigInt.js)可在上获得。支持运算+-*/以及余数、GCD、LCM、阶乘、素性测试、下一个素数、上一个素数 javascript现在有了。
在撰写本文时,只有chrome支持这一点 还没有进入
BigInt
可以与构造函数一起使用,例如BigInt(20)
或通过附加n
,例如20n
例如:
const max = BigInt(Number.MAX_SAFE_INTEGER);
const two = 2n;
const result = max + two;
console.log(result);
// → '9007199254740993'
const max=Number.max\u SAFE\u整数;
log('javascript数量已达到限制',max+1==max+2)//true;
log('javascript BigInt限制已达到',BigInt(最大)+1n==BigInt(最大)+2n);//false
BigInt
被添加为JavaScript的本机功能
typeof 123;
// → 'number'
typeof 123n;
// → 'bigint'
例如:
const max = BigInt(Number.MAX_SAFE_INTEGER);
const two = 2n;
const result = max + two;
console.log(result);
// → '9007199254740993'
因此,在尝试leetcode问题时,我编写了一个函数,它以字符串的形式获取两个数字,并以字符串的形式返回这些数字的总和。 (这不适用于负数,尽管我们可以修改此函数以涵盖负数)
var addTwoStr=函数(s1,s2){
s1=s1.split(“”).reverse().join(“”)
s2=s2.split(“”).reverse().join(“”)
var进位=0,rS='',x=null
如果(s1.长度>s2.长度){
for(设i=0;i
示例:addTwoStr('12035456','321442535')
输出:“441797101”Javascript不仅默认使用浮点类型,而且没有任何其他数字类型-这显然不是语言的“好部分”。我做了以下操作:
但是cosole给了我一个错误>无效数组长度:“buff=new array(k);”当我添加该库并按如下方式编辑函数时,它工作了:function bhash(arr){for(vari=0,L=arr.length,sum=new BigNumber(“0”);I
另请参阅以获得全面的解释和解决方法,谢谢。“n”代表什么?可以添加n后缀来明确告诉解释器将整数视为BigInt而不是数字,而不是将BigInt()作为函数调用。
var addTwoStr = function (s1, s2) {
s1 = s1.split("").reverse().join("")
s2 = s2.split("").reverse().join("")
var carry = 0, rS = '', x = null
if (s1.length > s2.length) {
for (let i = 0; i < s1.length; i++) {
let s = s1[i]
if (i < s2.length) {
x = Number(s) + Number(s2[i]) + carry
rS += String((x % 10))
carry = parseInt(x/10)
} else {
if (carry) {
x = Number(s) + carry
rS += String((x % 10))
carry = parseInt(x/10)
} else {
rS += s
}
}
}
} else {
for (let i = 0; i < s2.length; i++) {
let s = s2[i]
if (i < s1.length) {
x = Number(s) + Number(s1[i]) + carry
rS += String((x % 10))
carry = parseInt(x/10)
} else {
if (carry) {
x = Number(s) + carry
rS += String((x % 10))
carry = parseInt(x/10)
} else {
rS += s
}
}
}
}
if (carry) {
rS += String(carry)
}
return rS.split("").reverse().join("")
}
/** --if you want to show a big int as your wish use install and require this module
* By using 'big-integer' module is easier to use and handling the big int numbers than regular javascript
* https://www.npmjs.com/package/big-integer
*/
let bigInt = require('big-integer');
//variable: get_bigInt
let get_bigInt = bigInt("999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999");
let arr = [1, 100000, 21, 30, 4, BigInt(999999999999), get_bigInt.value];
console.log(arr[6]); // Output: 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999n
//Calculation
console.log(arr[6] + 1n); // +1
console.log(arr[6] + 100n); // +100
console.log(arr[6] - 1n); // -1
console.log(arr[6] - 10245n); // -1000n
console.log((arr[6] * 10000n) + 145n - 435n);