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 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
服务器安全设置的几个注册表设置
Jul 28 Javascript
jquery 鼠标滑动显示详情应用示例
Jan 24 Javascript
Angular 根据 service 的状态更新 directive
Apr 03 Javascript
一个仿微博登陆邮箱提示框js开发案例
Jul 28 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
javascript回调函数详解
Feb 06 Javascript
Express下采用bcryptjs进行密码加密的方法
Feb 07 Javascript
Django模板继承 extend标签实例代码详解
May 16 Javascript
jstree中的checkbox默认选中和隐藏示例代码
Dec 29 Javascript
JS使用Chrome浏览器实现调试线上代码
Jul 23 Javascript
vue绑定class的三种方法
Dec 24 Vue.js
关于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提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
Js实现复选框的全选、全不选反选功能代码实例
2020/02/28 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
pyqt5自定义信号实例解析
2018/01/31 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
django使用graphql的实例
2020/09/02 Python
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
铭万公司.net面试题笔试题
2014/07/20 面试题
大学生毕业自我鉴定范文
2014/02/03 职场文书
建房协议书
2014/04/11 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
2015年双拥工作总结
2015/04/08 职场文书
吴仁宝观后感
2015/06/09 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
如何在Python中妥善使用进度条详解
2022/04/05 Python