大整数乘法

链接:
Multiplying numbers as strings | Codewars

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function multiply(a,b){
var str1,str2,len1,len2,maxlen,result = [];
str1 = a.split("").reverse();
str2 = b.split("").reverse();
len1 = str1.length;
len2 = str2.length;


// 构造长度为 len1+len2(i+j从0到len1+len2-1)、数组元素都为0的数组result
// 因为要在下一步做累加,如果不初始化为0,result[]中的值会变为NaN,因为未初始化的数组中的值为undefined
let len=len1+len2
for(let i=0; i<len; i++){
result[i]=0
}

// 乘法的计算过程
for(var i = 0; i < len1; i++){
for(var j = 0; j < len2; j++){
//根据乘法的手动计算方式,在上下相同位上会有相加
result[i+j] += parseInt(str1[i]) * parseInt(str2[j]);
}
}

// 结果的每一位与10进行判断
var n = result.length;
for(var k = 0; k < n; k++){
var temp = result[k];
if(temp >= 10){
// 大于10则取余数,并进一位
result[k] = temp % 10;
result[k+1] += Math.floor(temp / 10);
}
}

// 排除result为[0], [0,0,0]的情况
let res = result.reverse().join("")
return res==0 ? 0 : res.replace(/\b(0*)/gi,"");
}
var d = multiply("900719925474099122", "9007199254740991111222");
console.log(d);
// len1 = 18
// len2 = 22
// result.length = 40
// 8112963841460666666477304721590154547084
// console.log(d.length); //40

let aa1 = multiply("98765", "56894")
console.log(aa1)
// 5619135910
let aa2 = multiply("0000001", "3")
console.log(aa2)
// 3
Contents
|