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 相关文章推荐
许愿墙中用到的函数
Oct 07 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
javascript时间函数基础介绍
Mar 28 Javascript
js实现文本框输入文字个数限制代码
Dec 25 Javascript
AngularJs 60分钟入门基础教程
Apr 03 Javascript
JS实现标签页切换效果
May 04 Javascript
基于jQuery Ajax实现下拉框无刷新联动
Dec 06 jQuery
浅析从vue源码看观察者模式
Jan 29 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
Dec 03 Javascript
在Koa.js中实现文件上传的接口功能
Oct 08 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
vue+flask实现视频合成功能(拖拽上传)
Mar 04 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版本号
2006/10/09 PHP
PHP中的CMS的涵义
2007/03/11 PHP
PHP字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
php一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
BootStrap的两种模态框方式
2017/05/10 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
js实现筛选功能
2020/11/24 Javascript
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Python的语言类型(详解)
2017/06/24 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
正规的求职信范文分享
2013/12/11 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
十佳青年事迹材料
2014/08/21 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python
微信小程序和php的登录实现
2021/04/01 PHP