题解 | #大数乘法#
大数乘法
http://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571
没有javascript的提交,我提交一个吧。过程就是模拟手算,一个一个数字相乘。最后加起来
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @return string字符串
*/
function solve( s , t ) {
// write code here
const sLength = s.length;
const tLength = t.length;
let res = [];
for (let tIndex = tLength - 1; tIndex >= 0; tIndex--) {
const valT = parseInt(t[tIndex] || '0', 10);
let sum = [];
let sign = 0;
for (let i = tLength - tIndex; i > 1 ; i--) {
sum.push('0')
}
for(let sIndex = sLength - 1; sIndex >= 0; sIndex--) {
const valS = parseInt(s[sIndex] || '0', 10);
let temp = valT * valS + sign;
if (temp >= 10) {
sign = Math.floor(temp / 10);
temp = temp % 10;
} else {
sign = 0;
}
sum.push(temp + '');
}
if (sign) {
sum.push(sign + '');
}
res.push(sum.reverse().join(''));
}
let temp = '0';
console.log(res)
for(let i = 0; i < res.length; i++) {
temp = add(temp, res[i]);
}
return temp;
}
function add(a, b) {
let alength = a.length;
let blength = b.length;
let res = [];
let sign = 0;
for(let i = alength - 1, j = blength - 1; i >= 0 || j >= 0; i--, j--) {
let temp = parseInt(a[i] || '0', 10) + parseInt(b[j] || '0', 10) + sign;
if (temp >= 10) {
sign = 1;
temp = temp - 10;
} else {
sign = 0;
}
res.push(temp);
}
if (sign) res.push(sign);
return res.reverse().join('').replace(/^0*(.+)/, '$1');
}
module.exports = {
solve : solve
};