Skip to content

一 字符串相加

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

JS
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;
};

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

  • 转成数字相加的问题
  • 注意处理全零字符串的情况
JS
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;
	}
};