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 相关文章推荐
prototype 学习笔记整理
Jul 17 Javascript
最简单的js图片切换效果实现代码
Sep 24 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
Jun 08 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
Uploadify上传文件方法
Mar 16 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
Dec 21 Javascript
Vue.use源码分析
Apr 22 Javascript
js如何获取网页所有图片
May 12 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 Javascript
简单了解JS打开url的方法
Feb 21 Javascript
关于AngularJS中几种Providers的区别总结
May 17 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的库,结果发现很多东西
2006/12/31 PHP
mysql时区问题
2008/03/26 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
Python实现端口复用实例代码
2014/07/03 Python
Python类的专用方法实例分析
2015/01/09 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
在python中bool函数的取值方法
2018/11/01 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
团组织关系介绍信
2014/01/12 职场文书
英文商务邀请信
2014/01/22 职场文书
贺卡寄语大全
2014/04/11 职场文书
超市开店计划书
2014/09/15 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
python元组打包和解包过程详解
2021/08/02 Python
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫