문제 출처:https://www.acmicpc.net/problem/10757
저는 처음에 이 문제를 보고 long long 타입으로 주고 그냥 더하면 되는거 아닌가 싶었습니다. 그런데 다시보니 input size가 ${10^100000}$이더군요.. 그래서 숫자 형태의 데이터 타입으로는 접근할 수 없겠다고 생각하여 string으로 문제를 풀었습니다. 각 숫자마다 문자열의 길이가 다르기때문에 reverse함수를 사용해서 뒤집어주었고, loop를 사용하여 더해서 10이상인 경우 올림을 해주었습니다.
코드는 다음과 같습니다:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std ;
int main(){
string a, b, answer = "" ;
cin >> a >> b ;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int a_size = a.length(), b_size = b.length() ;
int max_size = max(a_size, b_size) ;
bool round_up = false ;
for(int i = 0 ; i < max_size ; i++){
int num = 0 ;
if(i < a_size)
num += a[i] - '0' ;
if(i < b_size)
num += b[i] - '0' ;
if(num < 10){
if(round_up){
if(num == 9){
answer.insert(answer.begin(), '0');
}
else{
answer.insert(answer.begin(), num + '1');
round_up = false ;
}
}
else
answer.insert(answer.begin(), num + '0');
}
else{
num -= 10 ;
if(round_up)
answer.insert(answer.begin(), num + '1');
else
answer.insert(answer.begin(), num + '0');
round_up = true ;
}
}
if(round_up)
answer.insert(answer.begin(), '1');
cout << answer << endl ;
return 0 ;
}
해당 문제는 Github에서도 보실 수 있습니다:
https://github.com/gurcks8989/CodingTest/blob/master/BackJoon/HPS/P10757_Big_Number_A%2BB.cpp
훈수 및 조언은 언제든 환영입니다.