大數,即超出語言所能表示的數字最大範圍的數字,此時的數字只能用字串來表示。那麼要如何實現兩個大數相乘呢?我用JS實作了一下,程式碼如下:
console. log(bigMut("567", "1234")); // 699678
function bigMut(big, common) {
big = "";
common = "";
if (bigbig .length big = [common, common = big][0];
}
big = big.split("").reverse();
var oneMutManyRes = [];
var i = 0,
len = big.length;
for (; i oneMutManyRes[oneMutManyRes.length] = oneMutMany(big[i] , common) getLenZero(i);
}
var result = oneMutManyRes[0];
for (i = 1, len = oneMutManyRes.length; i }
return result;
}
function getLenZero(len) {
len = 1;
var. 🎜>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; .split("").reverse();
for (; i curItem = parseInt(many[i] || 0, 10);
curRes = curItem * one addTo;
toSave = curRes % 10;
addTo = (curRes - curRes % 10) / 10;
resAry.unshift(toSave);
}
resAry.unshift(toSave);
}
(ifAry.Aryf]if == 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 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] =if (resAry[0] = = 0) {
resAry.splice(0, 1);
}
return resAry.join("");
}