728x90
[백준알고리즘] 10757번: 큰 수 A+B -C++
이번 문제는 숫자를 읽을 수 없는 범위에서 연산까지 하는 문제다.
예전에 파이썬으로 소수점 아래를 연산할 때 경험해본 적 있는 타입의 문제였다.. 그때는 문제를 결국 풀었는지 어쨌는지 기억이 나지는 않지만.. 그때의 기억 덕분에 문제를 쉽게 풀었다.
잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다
사실 이렇게 큰 숫자를 int, double과 같은 type으로 입력받을 수는 없다. 또는 연산을 통해서 나온 값을 저장할 수도 없다.
한 가지 입력받을 수 있는 경우는 "문자열"로 인식할 때다.
그래서 std::string 타입을 선언하고 string 타입으로 읽어옴으로써 수를 문자열로 읽을 수 있다.
그리고.. 덧셈 연산은.. 우리가 실제로 덧셈을 할 때 올림 하고 자릿수마다 더하는 과정을 반복해줬다.
그러기 위해서 더 길이가 큰 값이 기준이 될 필요가 있었고, 항상 a에 길이가 더 긴 문자열(숫자)이 입력되게만 해주었다. 그 외에는 반복문을 통해서 문자열의 각 자릿수마다 더해주고 올림을 해주는 과정을 반복했다.
#include <iostream>
void solve(void);
int main(void)
{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
solve();
}
void solve(void)
{
std::string a, b;
std::cin >> a >> b;
if (a.size() < b.size())
swap(a, b);
int carry = 0;
std::string answer;
for (int i = 1; i <= a.size(); i++)
{
int index_a = a.size() - i;
int index_b = b.size() - i;
char char_a = a[index_a];
char char_b = (index_b < 0 ? '0' : b[index_b]);
int new_num = (char_a - '0') + (char_b - '0') + carry;
carry = (10 <= new_num) ? new_num / 10 : 0;
char remain = (new_num % 10) + '0';
answer = remain + answer;
}
if (carry)
answer = char(carry + '0') + answer;
std::cout << answer;
}
728x90
'algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 1005번: ACM Craft -C++ (0) | 2021.01.30 |
---|---|
[백준알고리즘] 1004번: 어린 왕자 -C++ (0) | 2021.01.29 |
[백준알고리즘] 10799번: 쇠막대기 -Python, C++ (0) | 2021.01.27 |
[백준알고리즘] 1009번: 분산처리 -C++ (0) | 2021.01.26 |
[백준알고리즘] 10814번: 나이순 정렬 -C++ (0) | 2021.01.25 |