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 相关文章推荐
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
Apr 01 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
js实现Select下拉框具有输入功能的方法
Feb 06 Javascript
通过点击jqgrid表格弹出需要的表格数据
Dec 02 Javascript
浅谈js script标签中的预解析
Dec 30 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
Jan 16 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
Jan 23 Javascript
React Form组件的实现封装杂谈
May 07 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
May 31 Javascript
js实现简单掷骰子小游戏
Oct 24 Javascript
google广告之另类js调用实现代码
Aug 22 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 输出简单动态WAP页面
2009/06/09 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
python支付宝支付示例详解
2019/08/22 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
社区关爱留守儿童活动方案
2014/08/22 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
2016新年致辞
2015/08/01 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书