다국어로 된 문제인데, 폴란드? 언뜻보면 돌려보면 단순한 사칙연산 같지만 큰 수 연산에 대한 문제이다.
문제
이번에는 좀 더 업그레이드된 버전으로, 두 개의 숫자를 더하는 문제이다. 이번에는 숫자가 상당히 크기 때문에, 만약에 이 큰 숫자를 다룰 수 있는 도구가 있었다면 좋을텐데...
입력
- 표준 입력의 첫 번째 줄에는 최대 5,000 자리인 양의 정수 a가 하나 들어온다.
- 표준 입력의 두 번째 줄에는 최대 5,000 자리인 양의 정수 b가 하나 들어온다.
- a와 b는 맨 앞자리에 0이 없이 입력된다.
처음엔 BigInt로 접근해보았지만 테스트 결과는 실패. 5,000자리까지 들어올 수 있기 때문에 BigInt의 범위를 한참(?) 벗어나기 때문이다.
–9,223,372,036,854,775,808
~ 9,223,372,036,854,775,807
)const path = '/dev/stdin'
const input = require('fs').readFileSync(path).toString().trim().split('\n').map(BigInt)
console.log(input[0] + input[1])
힌트는 a와 b의 맨 앞자리에 0으로 채워지지 않는다는 힌트를 보고 떠올랐다. A, B를 문자열 그대로 자릿수를 동일하게 맛추고 자릿수를 반복하면서 연산을 하고 합친 문자열을 리턴한다.
const path = '/dev/stdin'
const input = require('fs').readFileSync(path).toString().trim().split('\n')
let [A, B] = input
let result = '';
let carry = 0;
A = A.padStart(B.length, "0");
B = B.padStart(A.length, "0");
for (let i = A.length - 1; i >= 0; i--) {
const sum = parseInt(A[i]) + parseInt(B[i]) + carry;
result = sum % 10 + result;
carry = Math.floor(sum / 10);
}
if (carry > 0) {
result = carry + result;
}
console.log(result)