Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对大整数求和_Javascript_Biginteger - Fatal编程技术网

JavaScript对大整数求和

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

在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只有一种数字类型。您必须自己编写代码或使用大型整数库(甚至不能重载算术运算符)

更新
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);