NodeJS 如何在JavaScript中对指数形式的值进行模(%)运算?[已关闭]

ogq8wdun  于 2023-03-17  发布在  Node.js
关注(0)|答案(2)|浏览(154)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

3天前关闭。
Improve this question
我想对科学记数法或指数形式的值进行模运算。
我已经将数字1x10^135*10^9存储为以下形式:

const first_value = [
 1, // x*10^y, this is x
 13 // x*10^y, this is y
] // this is 1*10^13
const second_value = [
 5, // x*10^y, this is x
 9 // x*10^y, this is y
] // this is 5*10^9

我尝试计算两个数的整数模(10000000000000 % 5000000000)* 的等价值,而不需要 * 先将操作数转换为整数,因为所涉及的数字可能超过JavaScript中可以准确表示为整数的最大值。
我不想使用BigInt(),因为由于某种原因,它不能存储在JSON文件中。

q0qdq0h2

q0qdq0h21#

你可以取最小的指数值,用这个值减去两个指数,得到余数,然后乘以最小指数。

|
10000|000000000
    5|000000000
     |
const
    fn = (a, b, c, d) => {
        const min = Math.min(b, d);
        return a * 10 ** (b - min) % (c * 10 ** (d - min)) * 10 ** min;
    }
    
console.log(fn(1, 13, 5, 9));
1zmg4dgp

1zmg4dgp2#

最好编写一个函数来转换科学-〉BigInt
注意,BigInt和Integer不能互换使用。

const scientific = (coefficient, exponent) => {
    return BigInt(coefficient) * 10n**BigInt(exponent);
}

const first_value = [
 1, // x*10^y, this is x
 13 // x*10^y, this is y
] // this is 1*10^13
const second_value = [
 5, //x*10^y, this is x
 9 //x*10^y, this is y
] // this is 5*10^9

const modulo_value = scientific(...first_value) % scientific(...second_value)

console.log(scientific(...first_value)) // 10000000000000
console.log(scientific(...second_value)) // 5000000000
console.log(10000000000000 % 5000000000) // 0 (regular int)
console.log(modulo_value) // 0 (BigInt)

相关问题