https://www.acmicpc.net/problem/10757
C++ 데이터 타입별 범위: https://learn.microsoft.com/ko-kr/cpp/cpp/data-type-ranges?view=msvc-170
문제에 주어진 수의 범위를 보면 0 < A,B < 10^10000
이므로 이들의 합은 unsigned long long 타입에도 담을 수가 없다. 따라서 문자열로 수를 입력 받은 다음에 뒷자리부터 하나씩 더해줘야 한다.
참고: https://abcdefgh123123.tistory.com/194
https://dev-minji.tistory.com/51
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
string a, b;
cin >> a >> b;
int lenA = a.length();
int lenB = b.length();
// A의 자릿수가 크도록
if(lenB > lenA){
swap(a, b);
swap(lenA, lenB);
}
// B의 자릿수가 더 작으면 0으로 맞추기
string temp = "";
if(lenA != lenB){
for(int i = 0; i < lenA - lenB; i++){
temp += "0";
}
}
b = temp + b;
// 뒷자리부터 하나씩 더하기
string ans = "";
int carry = 0;
for(int i = lenA - 1; i >= 0; i--){
int sum = (a[i] - '0') + (b[i] - '0') + carry;
if(sum < 0) sum += '0';
if(sum > 9) carry = 1;
else carry = 0;
ans += sum % 10 + '0';
}
if(carry == 1) ans += "1";
for(int i = ans.size() - 1; i >= 0; i--){
cout << ans[i];
}
return 0;
}