js中,对整数范围是有限制的,超过安全范围会发生精度丢失,无法正常计算,常见的解决方案就是转成字符串处理,代码如下:
// 俩个大数相加 var a = '9998995523412341234123412441123412342', b = '0002245332134123423142341423424'; function bigSum(a, b) { a = String(a).split(''); b = String(b).split(''); var sum = '', // a,b数组元素之和 temp = 0, // a,b数组当前位置的计算结果 length = a.length > b.length ? a.length : b.length; while (length + 1) { temp = ~~(temp / 10) + ~~a.pop() + ~~b.pop(); // ~~: 双非按位取反运算符,对于正数,向下取整;对于负数,向上取整;非数字取值为0 sum = (temp % 10) + sum; length--; } return sum.replace(/^0+/, ''); // 去掉字符串前面的0 } bigSum(a, b); // => '9998995525657673368246835583464835766'
思路:1.将俩个字符串数字转成数组,取数组长度大的为循环次数 length + 1,加1是为了计算最后一次进1的情况。
2. temp 的值为( 当前a、b数组中数字之和 + 上次 temp 值去十取整 ),这里的值相加是数值相加,上次 temp 值若大于10需进1,则取1,小于10则取0。
3. sum 的值为( 当前 temp 值取余 + 上次 sum 值 ),这里的值相加是字符串拼接,当前仅对 temp 取余,如果需要进1,放到下次循环中处理(即下次计算 temp 值中判断是否进1)。
脚踏实地行,海阔天空飞
分类:
业务相关
标签:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端