문제에서 분명히 수로 변환하지 말라했는데 대부분의 풀이는 BigInt
형으로 변환하여 곱셈한 후 문자열로 변환하여 제출했음..
해당 풀이는 두 수의 일의자리부터 곱셈 및 올림 처리를 계산하여 정답 문자열을 구성하고 반환하는 풀이임
function multiply(num1: string, num2: string): string {
const len1 = num1.length;
const len2 = num2.length;
// 결과 문자열 최대 길이는 len1 + len2
const result = new Array(len1 + len2).fill(0);
for (let i = len1 - 1; i >= 0; i--) {
for (let j = len2 - 1; j >= 0; j--) {
// 현재 자리수의 곱 계산
// "1".charCodeAt(0) - '0'.charCodeAt // 1
const mul = (num1[i].charCodeAt(0) - '0'.charCodeAt(0)) * (num2[j].charCodeAt(0) - '0'.charCodeAt(0));
const p1 = i + j; // 다음 곱셈 결과(올림 발생 등)
const p2 = i + j + 1; // 현재 곱셈 결과
// 곱한 값을 현재 위치에 더함
const sum = mul + result[p2];
// 현재 자리수와 올림 계산
result[p2] = sum % 10; // 현재 자리수
result[p1] += Math.floor(sum / 10); // 올림 처리
}
}
let resultStr = result.join('');
// 임시로 채워진 0 모두 제거
while (resultStr.length > 1 && resultStr[0] === '0') {
resultStr = resultStr.slice(1);
}
return resultStr || '0'; // 결과가 비어있다면 '0'을 반환
}