JS实现两个大数(整数)相乘

 更新时间:2014年04月28日 17:15:47   作者:  
大数,即超出语言所能表示的数字最大范围的数字,那么如何实现两个大数相乘呢?下面有个不错的方法,大家可以参考下
大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示。那么如何实现两个大数相乘呢?我用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实现信息增删改查的方法

    这篇文章主要介绍了javascript实现信息增删改查的方法,实例分析了javascript操作页面元素实现针对页面信息的增删改查功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • JavaScript实现找质数代码分享

    JavaScript实现找质数代码分享

    这篇文章主要介绍了JavaScript实现找质数代码分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-03-03
  • JS实现物体带缓冲的间歇运动效果示例

    JS实现物体带缓冲的间歇运动效果示例

    这篇文章主要介绍了JS实现物体带缓冲的间歇运动效果,可实现物体定时间歇运动的功能,涉及javascript定时器、数学运算及页面元素动态修改的相关操作技巧,需要的朋友可以参考下
    2016-12-12
  • js操作CheckBoxList实现全选/反选(在客服端完成)

    js操作CheckBoxList实现全选/反选(在客服端完成)

    对于CheckBoxList控件来说,一方面要实现大量数据在服务器端的绑定工作,另一方面往往要求实现全选、反选等功能,接下来将介绍js操作CheckBoxList实现全选/反选,感兴趣的朋友可以了解下,或许对你有所帮助
    2013-02-02
  • 全面解析Bootstrap排版使用方法(文字样式)

    全面解析Bootstrap排版使用方法(文字样式)

    这篇文章全面解析了Bootstrap排版使用方法,本文重点介绍Bootstrap排版中的文字样式设置,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • Chrome插件(扩展)开发全攻略(完整demo)

    Chrome插件(扩展)开发全攻略(完整demo)

    Chrome插件是一个用Web技术开发、用来增强浏览器功能的软件,它其实就是一个由HTML、CSS、JS、图片等资源组成的一个.crx后缀的压缩包,本文给大家分享一个Chrome插件(扩展)开发全攻略完整demo,感兴趣的朋友跟随小编一起学习下吧
    2021-05-05
  • 浏览器视频帧操作方法 requestVideoFrameCallback()

    浏览器视频帧操作方法 requestVideoFrameCallback()

    这篇文章主要介绍了浏览器视频帧操作方法 requestVideoFrameCallback(),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • 微信小程序实现答题倒计时

    微信小程序实现答题倒计时

    这篇文章主要为大家详细介绍了微信小程序实现答题倒计时,自定义计时器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • JS实现京东商品分类侧边栏

    JS实现京东商品分类侧边栏

    这篇文章主要为大家详细介绍了JS实现京东商品分类侧边栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • JavaScript 获取用户客户端操作系统版本

    JavaScript 获取用户客户端操作系统版本

    今天,同事反映部分电脑访问系统,安装播放器(Media Player)报错,自己本机测试没问题,但是去用户现场查看情况,部分电脑确实存在此类问题,不知道问题出在何处,希望我帮助解决一下。
    2009-08-08

最新评论