두 큰 수(BigInteger)에 대해서는 숫자를 문자열로 받아와 뒤집어서 처음부터 마지막까지 모조리 한 자리씩 더한 다음에, 10이 넘는 자리마다 자리올림을 수행해주면 된다.
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
vector<int> zeroJustify(vector<int> str) {
vector<int>::iterator f_iter;
for (auto iter = str.end() - 1; iter >= str.begin(); iter--) {
if (*iter != 0) {
f_iter = iter;
break;
}
if (iter == str.begin() && *iter == 0) {
f_iter = str.begin();
break;
}
}
str.erase(++f_iter, str.end());
reverse(str.begin(), str.end());
return str;
}
vector<int> addBigInteger(string num1, string num2) {
if (num2.size() > num1.size()) swap(num1, num2);
vector<int> tmp(num1.size() + 1);
for (int i = 0; i < num2.size(); i++)
tmp[i] = (num1[i] - '0') + (num2[i] - '0');
for (int i = num2.size(); i < num1.size(); i++)
tmp[i] = (num1[i] - '0');
for (int i = 1; i < tmp.size(); i++) {
tmp[i] += tmp[i - 1] / 10;
tmp[i - 1] %= 10;
}
return tmp;
}
int main() {
string A, B;
cin >> A >> B;
reverse(A.begin(), A.end());
reverse(B.begin(), B.end());
for (int elem : zeroJustify(addBigInteger(A, B)))
cout << elem;
return 0;
}
참고로 파이썬에서는 BigInteger에 대한 개념이 내장되어있어 편하다.
# 이 코드는 파이썬에서 작동합니다.
a = int(input())
b = int(input())
print(a+b)
'알고리즘' 카테고리의 다른 글
[코드업] 3712 - 블럭 채우기 2 (0) | 2020.02.29 |
---|---|
[코드업] 3709 - 블럭 채우기 1 (0) | 2020.02.29 |
[코드업] 3500 - 지뢰 찾기 2 (0) | 2019.12.28 |
[코드업] 2102 - 배수(hard) (0) | 2019.11.30 |
[백준] 2468 - 안전 영역 (0) | 2019.11.30 |