You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中将1-400万整数拆分为两个指定范围的数?

解决方案:用除法取余实现完整覆盖的整数拆分

你的核心问题是原位运算拆分只能覆盖256×10000=256万种组合,无法利用全部400万值——原因是低8位最多只能表示256个术语索引,远达不到你需要的400个。要覆盖所有组合,直接用整数除法和取余是最直接的方案,因为400×10000正好等于400万,完全匹配你的总数范围。

具体逻辑

把1~4000000的原整数先转成0-based(减1),再通过以下计算拆分:

  • 术语索引(1~400):(m // 10000) + 1,其中m = n - 1
  • 数字部分(1~10000):(m % 10000) + 1

这个方法能确保每个原整数对应唯一的术语+数字组合,且所有400万种组合都能被遍历到,同时原数递增时,拆分后的序列完全可预测(按术语顺序逐个遍历数字)。

替换后的JavaScript代码

log(1)
log(10000)
log(10001)
log(2000000)
log(4000000)

function splitInt(int) {
  const m = int - 1; // 转成0-based索引
  const termIndex = Math.floor(m / 10000) + 1; // 1-400
  const numberPart = (m % 10000) + 1; // 1-10000
  return [termIndex, numberPart];
}

function log(int) {
  const [a, b] = splitInt(int)
  console.log(int, '=> [', a, b, ']')
}

测试输出示例

运行后会得到:

1 => [ 1, 1 ]
10000 => [ 1, 10000 ]
10001 => [ 2, 1 ]
2000000 => [ 200, 10000 ]
4000000 => [ 400, 10000 ]

为什么原来的位运算不行?

你之前的代码用int & 0xFF获取术语索引,这只能得到0~255的范围,最多对应256个术语,远小于你需要的400个;同时(int >> 8) & 0xFFFF得到的是065535的范围,但你只需要09999,这就导致大量值被浪费,最终只能覆盖256万种组合,无法利用全部400万。

内容的提问来源于stack exchange,提问作者Lance Pollard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:32:28