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的实现原理的模拟代码 -4 重要的扩展函数 extend
Aug 03 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
Mar 20 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
JavaScript验证Email(3种方法)
Sep 21 Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 Javascript
浅谈JavaScript的全局变量与局部变量
Jun 10 Javascript
微信小程序版本自动更新的方法
Jun 14 Javascript
如何进行微信公众号开发的本地调试的方法
Jun 16 Javascript
微信小程序定义和调用全局变量globalData的实现
Nov 01 Javascript
微信小程序实现点击按钮后修改颜色
Dec 05 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
Feb 11 Javascript
JS数组的高级使用方法示例小结
Mar 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php命名空间学习详解
2014/02/27 PHP
smarty简单入门实例
2014/11/28 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
jquery ajax abort()的使用方法
2010/10/28 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python多线程threading.Lock锁用法实例
2014/11/01 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
如何理解python对象
2020/06/21 Python
基于python实现坦克大战游戏
2020/10/27 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
工伤事故证明
2014/10/20 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python