一 字符串相加

    传两个字符串进来,返回⼀个字符串

    var addStrings = function(num1, num2) {
    	let result = '';
    	let i = num1.length - 1,
    		j = num2.length - 1,
    		carry = 0;
    	while (i >= 0 || j >= 0) {
    		let n1 = i >= 0 ? +num1[i] : 0;
    		let n2 = j >= 0 ? +num2[j] : 0;
    		const temp = n1 + n2 + carry;
    		carry = temp / 10 | 0;
    		result = `${temp % 10}${result}`;
    		i--;
    		j--;
    	}
    	if (carry === 1) result = `1${result}`;
    	return result;
    };

    传两个字符串进来,返回⼀个字符串

    • 转成数字相加的问题
    • 注意处理全零字符串的情况
    var multiply = function(num1, num2) {
    	let result = '0';
    	let i = num1.length - 1;
    	while (i >= 0) {
    		let subfixZero = new Array(num1.length - 1 - i).fill('0').join('');
    		let sumCount = +num1[i];
    		let tempSum = '0';
    		while (sumCount > 0) {
    			tempSum = bigSum(tempSum, num2);
    			sumCount--;
    		}
    		tempSum = `${tempSum}${subfixZero}`;
    		result = bigSum(result, tempSum);
    		i--;
    	}
    	// 处理⼀下开头的零
    	for (let i = 0; i < result.length; i++) {
    		if (result[i] !== '0') {
    			return result.slice(i);
    		}
    	}
    	return '0';
    
    	function bigSum(n1, n2) {
    		let result = '';
    		let i = n1.length - 1,
    			j = n2.length - 1,
    			curry = 0;
    		while (i >= 0 || j >= 0) {
    			let l1 = i >= 0 ? +n1[i] : 0;
    			let l2 = j >= 0 ? +n2[j] : 0;
    			let sum = l1 + l2 + curry;
    			curry = sum / 10 | 0;
    			result = `${sum % 10}${result}`;
    			i--;
    			j--;
    		}
    		if (curry === 1) result = `1${result}`;
    		return result;
    	}
    };