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 相关文章推荐
javascript数组的扩展实现代码集合
Jun 01 Javascript
jQuery拖动布局其结果保存到数据库
Oct 09 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
May 31 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
Aug 01 Javascript
JavaScript中浅讲ajax图文详解
Nov 11 Javascript
利用Javascript实现简单的转盘抽奖
Feb 13 Javascript
angular2 ng build部署后base文件路径问题详细解答
Jul 15 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
微信小程序版翻牌小游戏
Jan 26 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 Javascript
React Navigation 使用中遇到的问题小结
May 08 Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 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
德生PL550的电路分析
2021/03/02 无线电
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
js中将字符串转换成json的三种方式
2011/01/12 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python中字典的基础知识归纳小结
2015/08/19 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
python实现批量注册网站用户的示例
2019/02/22 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
python语言中有算法吗
2020/06/16 Python
Python如何获取文件路径/目录
2020/09/22 Python
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
记账会计岗位职责
2014/06/16 职场文书
项目投资合作意向书
2014/07/29 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
毕业生入职感言
2015/07/31 职场文书
诚信考试主题班会
2015/08/17 职场文书
PHP RabbitMQ消息列队
2022/05/11 PHP