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 相关文章推荐
JavaScript 判断浏览器类型及版本
Feb 21 Javascript
详谈 Jquery Ajax异步处理Json数据.
Sep 09 Javascript
JavaScript检测上传文件大小的方法
Jul 22 Javascript
基于Bootstrap+jQuery.validate实现表单验证
May 30 Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
js实现窗口全屏示例详解
Sep 17 Javascript
js中apply和call的理解与使用方法
Nov 27 Javascript
基于better-scroll 实现歌词联动功能的代码
May 07 Javascript
javascript中正则表达式语法详解
Aug 07 Javascript
vue监听滚动事件的方法
Dec 21 Vue.js
使用JS实现简易计算器
Jun 14 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访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
Python部署web开发程序的几种方法
2017/05/05 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
python 函数中的参数类型
2020/02/11 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
社区矫正工作方案
2014/06/04 职场文书
大学生毕业求职信
2014/06/12 职场文书
城管个人总结
2015/02/28 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
义诊活动通知
2015/04/24 职场文书
django上传文件的三种方式
2021/04/29 Python
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android