브론즈 5문제이지만, 파이썬이나 자바로 풀지 않을 경우 난이도가 상승하는 문제다.
최대 10000 자리까지 될 수 있기 때문에 string으로 입력을 받아준다.
문자열의 길이를 비교해 s1이 항상 크게 해주며 두 문자열을
각각 int 배열에 거꾸로 넣어준다.
각 자리의 수를 더한 것을 sum에 넣고 만약 10이 넘어간다면
다음 자리는 올림을 해준 뒤, sum은 10을 빼주며 res 벡터에 넣는다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int num1[10001], num2[10001], sum;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
string s1, s2;
cin >> s1 >> s2;
if (s1.size() < s2.size()) swap(s1, s2);
for (int i = 0; i < s1.size(); i++) {
num1[i] = s1[s1.size() - 1 - i] - '0';
}
for (int i = 0; i < s2.size(); i++) {
num2[i] = s2[s2.size() - 1 - i] - '0';
}
vector<int> res;
for (int i = 0; i < s1.size(); i++) {
sum = num1[i] + num2[i];
if (sum >= 10) {
num1[i + 1]++;
sum -= 10;
}
res.push_back(sum);
}
bool flag = true;
if (num1[s1.size()] != 0) cout << 1; // 올림수가 있을 때
else { // 올림수가 없는데 첫 자리가 0 일때 ex) 002 + 002 = 004 (x)
if (res[res.size() - 1] == 0) flag = false;
}
for (int i = res.size() - 1; i >= 0; i--) {
if (res[i] != 0) flag = true;
if (flag) cout << res[i]; // 첫 자리가 0이 아닌 수부터 시작
}
}
'🍞 Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 1197 최소 스패닝 트리 c++ (0) | 2022.09.02 |
---|---|
[백준] 17396 백도어 c++ (0) | 2022.09.02 |
[백준] 11657 타임머신 c++ (0) | 2022.09.02 |
[백준] 13565 침투 c++ (0) | 2022.09.02 |
[백준] 10026 적록색약 c++ (0) | 2022.09.02 |