UNPKG

gaga-js-utils

Version:

js tools

51 lines (48 loc) 1.62 kB
const { isType } = require("../check/index"); // 大数相加 exports.largeNumberAdd = (a, b) => { if (isType(a) !== 'String' || isType(a) !== 'String') { console.error('大数相乘参数请传字符串数字'); return; } //取两个数字的最大长度 let maxLength = Math.max(a.length, b.length); //用0去补齐长度 a = a.padStart(maxLength, 0); //"0009007199254740991" b = b.padStart(maxLength, 0); //"1234567899999999999" //定义加法过程中需要用到的变量 let t = 0; let f = 0; //"进位" let sum = ""; for (let i = maxLength - 1; i >= 0; i--) { t = parseInt(a[i]) + parseInt(b[i]) + f; f = Math.floor(t / 10); sum = (t % 10) + sum; } if (f == 1) { sum = "1" + sum; } return sum; }; // 大数相乘 exports.largeNumbersMultiply = (num1, num2) => { if (isType(num1) !== 'String' || isType(num2) !== 'String') { console.error('大数相加参数请传字符串数字'); return; } if (isNaN(num1) || isNaN(num2)) return ""; if (num1 === "0" || num2 === "0") return "0"; let l1 = num1.length, l2 = num2.length; let result = []; for (let i = l1 - 1; i >= 0; i--) { for (let j = l2 - 1; j >= 0; j--) { let index1 = i + j; let index2 = i + j + 1; let product = num1[i] * num2[j] + (result[index2] || 0); result[index2] = product % 10; result[index1] = Math.floor(product / 10) + (result[index1] || 0); } } return result.join("").replace(/^0+/, ""); };