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 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐share.js
Dec 23 Javascript
JQuery与iframe交互实现代码
Dec 24 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
javascript在子页面中函数无法调试问题解决方法
Jan 17 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
May 12 Javascript
JavaScript中标识符提升问题
Jun 11 Javascript
jqGrid中文文档之选项设置
Dec 02 Javascript
JS获取元素多层嵌套思路详解
May 16 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
基于vue.js路由参数的实例讲解——简单易懂
Sep 07 Javascript
原生JS实现的简单轮播图功能【适合新手】
Aug 17 Javascript
Webpack5正式发布,有哪些新特性
Oct 12 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中使用Oracle数据库(6)
2006/10/09 PHP
oracle资料库函式库
2006/10/09 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
php 问卷调查结果统计
2015/10/08 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
js实现一个简易计算器
2020/03/30 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
python 使用值来排序一个字典的方法
2018/11/16 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
python查看数据类型的方法
2019/10/12 Python
python 读取二进制 显示图片案例
2020/04/24 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
Python常用数据分析模块原理解析
2020/07/20 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
网络编辑职责
2014/03/01 职场文书
2014年党委工作总结
2014/11/22 职场文书
幼儿教师辞职信
2015/02/27 职场文书
大学生就业意向书
2015/05/11 职场文书
数学备课组工作总结
2015/08/12 职场文书
Nginx配置使用详解
2022/07/07 Servers