JS实现两个大数(整数)相乘


Posted in Javascript onApril 28, 2014

大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示。那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下:

console.log(bigMut("567", "1234")); // 699678 
function bigMut(big, common) { 
big += ""; 
common += ""; 
if (big.length < common.length) { 
big = [common, common = big][0]; 
} 
big = big.split("").reverse(); 
var oneMutManyRes = []; 
var i = 0, 
len = big.length; 
for (; i < len; i++) { 
oneMutManyRes[oneMutManyRes.length] = oneMutMany(big[i], common) + getLenZero(i); 
} 
var result = oneMutManyRes[0]; 
for (i = 1, len = oneMutManyRes.length; i < len; i++) { 
result = bigNumAdd(result, oneMutManyRes[i]); 
} 
return result; 
} 
function getLenZero(len) { 
len += 1; 
var ary = []; 
ary.length = len; 
return ary.join("0"); 
} 
function oneMutMany(one, many) { 
one += ""; 
many += ""; 
if (one.length != 1) { 
one = [many, many = one][0]; 
} 
one = parseInt(one, 10); 
var i = 0, 
len = many.length, 
resAry = [], 
addTo = 0, 
curItem, 
curRes, 
toSave; 
many = many.split("").reverse(); 
for (; i <= len; i++) { 
curItem = parseInt(many[i] || 0, 10); 
curRes = curItem * one + addTo; 
toSave = curRes % 10; 
addTo = (curRes - curRes % 10) / 10; 
resAry.unshift(toSave); 
} 
if (resAry[0] == 0) { 
resAry.splice(0, 1); 
} 
return resAry.join(""); 
} 
function bigNumAdd(big, common) { 
big += ""; 
common += ""; 
var maxLen = Math.max(big.length, common.length), 
bAry = big.split("").reverse(), 
cAry = common.split("").reverse(), 
i = 0, 
addToNext = 0, 
resAry = [], 
fn, 
sn, 
sum; 
for (; i <= maxLen; i++) { 
fn = parseInt(bAry[i] || 0); 
sn = parseInt(cAry[i] || 0); 
sum = fn + sn + addToNext; 
addToNext = (sum - sum % 10) / 10; 
resAry.unshift(sum % 10); 
} 
if (resAry[0] == 0) { 
resAry.splice(0, 1); 
} 
return resAry.join(""); 
}
Javascript 相关文章推荐
js实现简单模态窗口,背景灰显
Nov 14 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
JavaScript之Object类型介绍
Apr 01 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
js实现文字跑马灯效果
Feb 23 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
Mar 21 jQuery
lhgcalendar时间插件限制只能选择三个月的实现方法
Jul 03 Javascript
vue脚手架搭建项目的兼容性配置详解
Jul 17 Javascript
详解使用React.memo()来优化函数组件的性能
Mar 19 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
js实现简单点赞操作
Mar 17 Javascript
JavaScript用document.write()输出换行的示例代码
Nov 26 Javascript
关于img的href和src取变量及赋值的方法
Apr 28 #Javascript
php和js对数据库图片进行等比缩放示例
Apr 28 #Javascript
JS计算网页停留时间代码
Apr 28 #Javascript
js分页代码分享
Apr 28 #Javascript
jquery使用ajax实现微信自动回复插件
Apr 28 #Javascript
jquery禁用右键示例
Apr 28 #Javascript
jquery实现带二级菜单的导航示例
Apr 28 #Javascript
You might like
PHP:风雨欲来 路在何方?
2006/10/09 PHP
VFP与其他应用程序的集成
2006/10/09 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python中正则表达式详解
2017/05/17 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
什么是Python中的顺序表
2020/06/02 Python
python/golang 删除链表中的元素
2020/09/14 Python
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
急诊科护士自我鉴定
2013/10/14 职场文书
入党积极分子评语
2014/05/04 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
客房服务员岗位职责
2015/02/09 职场文书
学生个人总结范文
2015/02/15 职场文书
python中if和elif的区别介绍
2021/11/07 Python
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python