Add to Array-Form of Integer

ㅋㅋ·2023년 2월 15일
0

알고리즘-leetcode

목록 보기
112/135

10진수가 자리수마다 나뉘어있는 정수형 벡터 num과 이 벡터에 더할 값 k가 주어진다.

num에 k를 더한 후 똑같이 10진수로 자리수마다 나뉜 정수형 벡터를 구하여 반환하는 문제

class Solution {
public:
    vector<int> addToArrayForm(vector<int>& num, int k) {
        
        int digit{10};
        vector<int> result(num.size());

        for (int i = 0; 0 < k; ++i)
        {
            auto division = std::div(k, digit);
            if (result.size() == i)
            {
                result.emplace_back(division.rem);
            }
            else
            {
                result[i] = division.rem;
            }
            
            k = division.quot;
        }

        auto numIter{num.rbegin()};
        auto resultIter{result.begin()};

        bool carry{false};
        while (resultIter != result.end() && numIter != num.rend())
        {
            if (carry)
            {
                carry = false;
                ++(*resultIter);
            }

            *resultIter += *numIter;

            if (9 < *resultIter)
            {
                carry = true;
                *resultIter -= 10;
            }

            ++numIter;
            ++resultIter;
        }

        while (resultIter != result.end())
        {
            if (carry)
            {
                carry = false;
                ++(*resultIter);
            }

            if (9 < *resultIter)
            {
                carry = true;
                *resultIter -= 10;
            }

            ++resultIter;
        }

        if (carry)
        {
            result.push_back(1);
        }

        std::reverse(result.begin(), result.end());

        return result;
    }
};

0개의 댓글