Python이나 Java의 경우 이 문제는 매우 쉽다. 숫자의 크기가 매우 커도 처리할 수 있기 때문에…
def solution(a, b):
return str(int(a) + int(b))
하지만 C++의 경우 long long 8byte가 최대다. 더 확장하고 싶으면 BigInteger을 직접 구현해야하는데, 문제 푸는데 언제 다 구현하고 앉아있어…!! 이 문제의 경우 숫자의 길이가 최대 100,000자리이기 때문에 일반적인 연산으로는 계산이 불가하다. 그래서 마치 우리가 세로셈으로 손계산하듯이 (초등학교 세자리수 덧셈마냥) 올림을 고려하면서 한 자리씩 계산하도록 구현했다.
내 풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string a, string b) {
string ans = "";
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
if (a.size() < b.size()){
a.resize(b.size(), '0');
} else {
b.resize(a.size(), '0');
}
// a[i] + b[i] = 10*p + q
int p = 0;
for (int i=0; i<a.size(); i++){
int cur = (a[i] - '0') + (b[i] - '0') + p;
ans += to_string(cur%10);
p = cur/10;
}
if (p != 0){
ans += to_string(p);
}
reverse (ans.begin(), ans.end());
return ans;
}
일의 자리에서부터 계산하기 위해서 reverse()
함수를 사용해서 뒤집어주고 차례대로 연산해 나간다. 이때 올림이 있는 경우를 대비해서 p(10으로 나눈 몫)에 저장해두고 다음 연산 때 꺼내서 사용한다.