这里两个超大的数字相乘,用到前面的两个超大的数字相加的方法,所以这里顺便贴一下代码。
function largeCount(f, t) {
f += "";
t += "";
let fl = f.length,
tl = t.length,
arr = [],
i = 0,
spacing = fl - tl,
len = 0,
lastMan = [],
fr = f.split("").reverse(),
tr = t.split("").reverse(),
current = 0,
curr = 0,
isT, maxLen;
if (spacing > 0) {
len = tl;
lastMan = fr;
maxLen = fl;
} else {
len = fl;
lastMan = tr;
maxLen = tl;
}
function course(current, i) {
if (current > 9) {
arr[i] = current % 10;
arr[i + 1] = 1;
return true;
} else {
arr[i] = current;
return false;
}
}
for (; i < len;) {
curr = arr[i] ? arr[i] : 0;
current = fr[i] * 1 + tr[i] * 1 + curr * 1;
course(current, i++);
if (i === len) {
if (arr[i]) {
do {
curr = lastMan[i];
if (curr) {
current = lastMan[i] * 1 + arr[i] * 1;
isT = course(current, i++);
} else {
isT = false;
}
} while (isT && i < maxLen);
}
arr = [...arr, ...lastMan.slice(i)];
}
}
return arr.reverse().join("");
}
下面是两个超大的数字相乘的代码
function multiply(f, t) {
let current, currentLevel, i, j, mult, a1, a2, zero;
let fl = f.length;
let tl = t.length;
let result = [];
let fArr = [];
let tArr = [];
let maxLen = fl > tl ? fl : tl;
f = reverse(f);
t = reverse(t);
function reverse(s) {
return s.split('').reverse().join('');
}
function addZero(n) {
let t = '';
for (j = 0; j < n; j++) {
t += '0';
}
return t;
}
for (i = 0; i < maxLen; i++) {
zero = addZero(i);
a1 = f[i];
a2 = t[i];
if (a1) {
fArr[i] = [a1, zero];
}
if (a2) {
tArr[i] = [a2, zero];
}
}
for (i = 0; i < fl; i++) {
current = fArr[i];
for (j = 0; j < tl; j++) {
currentLevel = tArr[j];
result.push((current[0] * 1) * (currentLevel[0] * 1) + current[1] + currentLevel[1]);
}
}
maxLen = result.length;
mult = result[0];
for (i = 1; i < maxLen; i++) {
mult = largeCount(mult, result[i]);
}
return mult;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。