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脚本性能优化注意事项
Nov 18 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
Nov 13 Javascript
javascript实现控制的多级下拉菜单
Jul 05 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 Javascript
理解javascript中的闭包
Jan 11 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
js获取json中key所对应的value值的简单方法
Jun 17 Javascript
在vue中获取dom元素内容的方法
Jul 10 Javascript
js实现省市级联效果分享
Aug 10 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
Sep 21 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+mysql写的留言本
2006/10/09 PHP
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
php object转数组示例
2014/01/15 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
大学学习个人的自我评价
2014/02/18 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
升学宴演讲稿
2014/09/01 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
爱国教育主题班会
2015/08/14 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏