학습(0)/C++ 문제풀이

두 수의 합

누가 뭐래도 개발자 2025. 3. 12. 16:23

ull범위를 넘는 수여서 가산기를 구현하는 간단한 문제였지만,

드럽게 못 풀었네.

 

#include <string>
#include <vector>
#include <deque>

using namespace std;

string solution(string a, string b) {
    deque<char> deque;
    
    int carry = 0;
    int j = a.size() - 1;
    int k = b.size() - 1;
    int loop = max(a.size(), b.size());

    for (int i = 0; i < loop; ++i, --j, --k)
    {
        int sum = carry + (a[j] - '0') + (b[k] - '0');
        carry = 0;
        if (sum / 10)
        {
            carry = 1;
            sum %= 10;
        }

        deque.push_front(sum + '0');

        if (j != k)
        {
            if (j == 0)
            {
                while (k--)
                {
                    int sum = carry + (b[k] - '0');
                    carry = 0;
                    if (sum / 10)
                    {
                        carry = 1;
                        sum %= 10;
                    }

                    deque.push_front(sum + '0');
                }
                break;
            }
            else if (k == 0)
            {
                while (j--)
                {
                    int sum = carry + (a[j] - '0');
                    carry = 0;
                    if (sum / 10)
                    {
                        carry = 1;
                        sum %= 10;
                    }

                    deque.push_front(sum + '0');
                }
                break;
            }
        }

    }

    if (carry)
        deque.push_front('1');

    string answer(deque.begin(), deque.end());
    return answer;
}

 

 

다른 사람 코드

 

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

using namespace std;

string solution(string a, string b) {
    int alen = a.length();
    int blen = b.length();
    int carry = 0;
    string answer = "";
    for(int i = 1; i <= max(alen, blen); i++)
    {
        int numa = (i > alen)? 0 : a[alen-i]-'0';
        int numb = (i > blen)? 0 : b[blen-i]-'0';
        int num = numa + numb + carry;

        if   (num >= 10) carry = 1;
        else             carry = 0;

        char numc = num%10+'0';
        answer = numc + answer;
    }

    if(carry) answer = "1"+answer;
    return answer;
}

'학습(0) > C++ 문제풀이' 카테고리의 다른 글

조건에 맞게 수열 변환/ transform()  (0) 2025.03.12
주사위 게임1 / 비트 홀짝  (0) 2025.03.12
가장 큰 수 찾기 / distance()  (0) 2025.03.12
인덱스 바꾸기/ swap  (0) 2025.03.12
최댓값 2/ 조합 연습  (0) 2025.03.12