반응형
링크
https://www.acmicpc.net/problem/10757
풀이
숫자를 자릿수마다 배열에 담습니다.
반복문을 이용해서 한 자리씩 계산해줍니다. 여기서 carry bit를 만들어서 받아올림을 구현해줍니다.
마지막에 출력해줍니다.
코드 보고 이해하는 게 더 빠를 것 같아요!
이 방법은 carry, 즉 받아올림이 1이 넘지 않아서 쉽게 해결할 수 있습니다.
이를 응용하면 2의 n승을 빠르게 구할 수 있습니다.
코드
//10757_큰 수 A+B
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int a[10004], b[10004], sum[10004], carry;
string str1, str2;
int main() {
cin >> str1 >> str2; //입력 받음
for (int i = 0; i < str1.length(); ++i) { //배열에 저장
char tmp = str1.at(i);
a[str1.length() - i] = atoi(&tmp);
}
for (int i = 0; i < str2.length(); ++i) { //배열에 저장
char tmp = str2.at(i);
b[str2.length() - i] = atoi(&tmp);
}
for (int i = 1; i <= max(str1.length(), str2.length()); ++i) { //한 자리씩 계산
sum[i] = a[i] + b[i] + carry; //a 숫자와 b 숫자와 carry 더함
if (sum[i] >= 10) { //10이 넘었다면 앞으로 올려줘야 함
sum[i] -= 10;
carry = 1;
}
else carry = 0;
}
if (carry) cout << 1; //마지막까지 계산했는데 carry가 있다면 출력
for (int i = 0; i < max(str1.length(), str2.length()); ++i) { //sum에 계산한 거 역순으로 출력
cout << sum[max(str1.length(), str2.length())-i];
}
return 0;
}
반응형
'PS > BOJ' 카테고리의 다른 글
[백준 BOJ] 1316 그룹 단어 체커 (0) | 2019.08.12 |
---|---|
[백준 BOJ] 3052 나머지 (0) | 2019.08.12 |
[백준 BOJ] 14490 백대열 (0) | 2019.08.11 |
[백준 BOJ][deque] 2164 카드2 (0) | 2019.08.11 |
[백준 BOJ] 2312 수 복원하기 (0) | 2019.08.11 |