链接:
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
|