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 相关文章推荐
让网页根据不同IE版本显示不同的内容
Feb 08 Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
Jan 19 Javascript
jQuery实现连续动画效果实例分析
Oct 09 Javascript
Javascript函数式编程语言
Oct 11 Javascript
Vue.js -- 过滤器使用总结
Feb 18 Javascript
如何让node运行es6模块文件及其原理详解
Dec 11 Javascript
微信小程序实现提交input信息到后台的方法示例
Jan 19 Javascript
vue使用canvas实现移动端手写签名
Sep 22 Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 20 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
几种显示数据的方法的比较
2006/10/09 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
关于Vue组件库开发详析
2018/07/01 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
Python descriptor(描述符)的实现
2020/11/15 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
Solaris操作系统的线程机制
2015/07/28 面试题
信访工作者先进事迹
2014/01/17 职场文书
剪彩仪式主持词
2014/03/19 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
迎七一演讲稿
2014/09/12 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
Python基于百度AI实现抓取表情包
2021/06/27 Python
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js