JS实现两个大数(整数)相乘_Javascript教程-查字典教程网
JS实现两个大数(整数)相乘
JS实现两个大数(整数)相乘
发布时间:2016-12-30 来源:查字典编辑
摘要:大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示。那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下:复制代...

大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示。那么如何实现两个大数相乘呢?我用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教程学习
    编程开发子分类