[백준 알고리즘] 10757번: 큰 수 A+B

10757번: 큰 수 A+B

A+B를 계산하시오. 첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

접근 방법:

A 와 B의 범위가 매우 크기 때문에 long long int로 연산해도 오버플로우가 난다. 따라서 전공교과에서 배웠던 이진수 adder 컨셉을 그대로 구현하기로 했다. 코딩하면서 이걸 하게될 줄은 몰랐다 정말..문자열을 스택처럼 하나씩 꺼내면서 한자리씩 더하고 10을 넘어가면 carry out으로 다음자리에 넘겨주는 방식으로 연산을 진행했다.

통과 코드:

#include <iostream>
#include <string>
#include <vector>


using namespace std;

int main (){
    string str1, str2;
    vector <int> result;
    int c_out = 0;

    cin >> str1 >> str2;

    while(true){
        string n1, n2;
        if (str1.empty()) n1 = "0";
        else n1 = str1.at(str1.size()-1);

        if (str2.empty()) n2 = "0";
        else n2 = str2.at(str2.size()-1);

        int num = c_out + stoi(n1) + stoi(n2);
        c_out = 0;

        if(num >= 10) c_out = num/10;
        result.insert(result.begin(), num%10);

        if (!str1.empty()) str1.pop_back();
        if (!str2.empty()) str2.pop_back();
        if (str1.empty() && str2.empty()) break;
    }
    if (c_out > 0) result.insert(result.begin(), c_out);

    for (int i = 0 ; i < result.size() ; i++){
        cout << result[i];
    }
    return 0;
}

전여훈
Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.