반응형
풀이
C#에서는 BigInteger 클래스로 하면 뚝딱일 수 있지만 문제 출제의도에 벗어나기 때문에 C++로 하는 것이 바람직하다.
나는 두 큰 수를 string으로 입력받은 후 각 숫자 배열을 역순으로 해줬다.
그리고 정답을 담을 int형 리스트를 만들었다.
두 수의 각 자리별로 수를 더하고 결과의 십의 자리는 올림처리를 해주고 일의 자리를 리스트에 추가한다.
짤은 수의 끝까지 그렇게 계산하면 마지막 계산에서의 올림이 남을 수 있다.
이제 긴 수의 나머지 부분의 각 자리별로 올림처리를 계속 해주며 리스트에 추가한다.
마지막으로 남은 올림처리까지 해주면 끝.
두 수를 string으로 입력 받았기 떄문에 각 자리수가 0이 아닌 '0'처럼 저장된 것에 유의해야한다.
코드
#include <bits/stdc++.h>
using namespace std;
#define TC(T) int T; cin >> T; while(T--)
#define FAST_IO cin.tie(NULL); ios::sync_with_stdio(false);
#define FOR(i, N) for(int i = 0; i < N; ++i)
#define INF 987654321
#define ERR 1e-13
#define EL "\n"
int main() {
#ifdef DEBUG
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
FAST_IO;
string lhs, rhs;
cin >> lhs >> rhs;
lhs = string(lhs.rbegin(), lhs.rend());
rhs = string(rhs.rbegin(), rhs.rend());
list<int> ans;
int cur = 0, dest = min(lhs.size(), rhs.size()), up = 0;
for (; cur < dest; ++cur) {
ans.push_front(lhs[cur] + rhs[cur] + up - 96);
up = ans.front() / 10;
ans.front() %= 10;
}
dest = lhs.size();
for (; cur < dest; ++cur) {
ans.push_front(lhs[cur] + up - 48);
up = ans.front() / 10;
ans.front() %= 10;
}
dest = rhs.size();
for (; cur < dest; ++cur) {
ans.push_front(rhs[cur] + up - 48);
up = ans.front() / 10;
ans.front() %= 10;
}
if (up)
ans.push_front(up);
for (auto& el : ans)
cout << el;
cout << EL;
return 0;
}
결과
반응형
'프로그래밍 > PS' 카테고리의 다른 글
[C++] 백준 16928번: 뱀과 사다리 게임 (0) | 2021.05.02 |
---|---|
[C++] 백준 2206번: 벽 부수고 이동하기 (0) | 2021.02.23 |
[C++] 백준 14502번: 연구소 (1) | 2021.01.04 |
[C++] 백준 9465번: 스티커 (0) | 2020.12.22 |
[C++] 백준 2193번: 이친수 (0) | 2020.12.22 |