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

JavaScript로 두 숫자를 더할 때 발생하는 받아올림(Carry) 횟수 구하기

문제 설명

두 개의 숫자를 인자로 받는 JavaScript 함수를 작성해야 합니다.

이 함수는 마치 종이 위에서 손으로 계산하듯 두 숫자를 더할 때, 받아올림(carry)이 몇 번 발생하는지 그 횟수를 세어 반환해야 합니다.

예를 들어 179와 284를 더하는 과정을 살펴보겠습니다. 일의 자리에서 9 + 4 = 13이 되어 첫 번째 받아올림이 발생하고, 십의 자리에서 7 + 8 + 1(받아올림) = 16이 되어 두 번째 받아올림이 발생합니다. 따라서 이 두 숫자에 대해 함수는 2를 반환해야 합니다.

예제 코드

다음은 이 문제를 해결하는 JavaScript 코드입니다.

const num1 = 179;
const num2 = 284;
const countCarries = (num1 = 1, num2 = 1) => {
    let res = 0;
    let carry = 0;
    while(num1 + num2){
        carry = +(num1 % 10 + num2 % 10 + carry > 9);
        res += carry;
        num1 = num1 / 10 | 0;
        num2 = num2 / 10 | 0;
    };
    return res;
};
console.log(countCarries(num1, num2));

코드 동작 원리

이 코드의 핵심 로직은 다음과 같습니다.

1. 자릿수 추출: 나머지 연산자(%)를 사용해 각 숫자의 일의 자리 값을 구합니다. num1 % 10, num2 % 10이 바로 그 역할을 합니다.

2. 받아올림 판별: 두 자릿수와 이전 단계의 받아올림 값을 모두 더한 결과가 9보다 크면 새로운 받아올림이 발생한 것입니다. 비교 연산의 결과인 true/false를 단항 더하기(+)로 숫자 1 또는 0으로 변환합니다.

3. 자릿수 제거: num / 10 | 0 연산으로 숫자를 10으로 나눈 뒤 소수점 이하를 버려, 다음 자릿수를 검사할 준비를 합니다. 비트 OR 연산자(|)가 정수 변환 역할을 수행합니다.

4. 반복 종료 조건: 두 숫자가 모두 0이 되면 while 루프가 종료되고, 누적된 받아올림 횟수를 반환합니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

2

179 + 284 = 463이며, 계산 과정에서 받아올림이 두 번 발생했으므로 정확히 2가 출력되는 것을 확인할 수 있습니다.