Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

곱셈 연산자 없이 JavaScript로 두 수의 곱 구하는 방법

두 개의 숫자를 입력받아 그 곱을 반환하는 함수를 작성하되, 곱셈 연산자(*)는 사용하지 않아야 하는 상황을 가정해 보겠습니다. 얼핏 어려워 보이지만, 수학적 성질을 활용하면 의외로 간단하게 해결할 수 있습니다. 대표적인 두 가지 방법을 소개합니다.

방법 1: 나눗셈 연산자를 두 번 활용하기

곱셈과 나눗셈은 서로 역연산 관계입니다. 따라서 어떤 수를 다른 수의 역수로 나누면, 결과적으로 두 수를 곱한 것과 같은 효과를 얻을 수 있습니다.

수식으로 표현하면 다음과 같습니다.

a / (1 / b) = a × b

코드로 구현하면 아래와 같습니다.

const a = 20, b = 45;
const product = (a, b) => a / (1 / b);
console.log(product(a, b));

다만 이 방법은 두 번째 인수가 0일 경우 역수 계산이 불가능하다는 점, 그리고 부동소수점 연산 특성상 일부 값에서 미세한 오차가 발생할 수 있다는 점을 유의해야 합니다.

방법 2: 로그의 성질 활용하기

로그에는 다음과 같은 잘 알려진 성질이 있습니다.

log(a) + log(b) = log(ab)

즉, 로그의 덧셈은 실제 곱셈으로 변환됩니다. 이 성질을 활용하면 자연 로그(Math.log)와 지수 함수(Math.exp)를 조합하여 곱셈을 구현할 수 있습니다. 부동소수점 연산 과정에서 발생할 수 있는 오차를 없애기 위해 Math.round()로 반올림 처리하는 점도 눈여겨볼 만합니다.

예제 코드

const a = 20, b = 45;
const product = (a, b) => {
    const logProduct = Math.log(a) + Math.log(b);
    return Math.round(Math.exp(logProduct));
};
console.log(product(a, b));

참고로 이 방법 역시 음수나 0이 입력되면 로그를 정의할 수 없어 적용이 어렵습니다. 따라서 실무에서는 입력 범위를 검증한 후 사용하는 것이 좋습니다.

실행 결과

두 방법 모두 콘솔에 동일한 결과가 출력됩니다.

900