두 수의 합

Subin·2024년 9월 2일

Algorithm

목록 보기
26/69

a와 b를 정수로 봤을 때 범위가 int, long, long long을 초과해서 문제 푸는 데에 어려움을 겪었던 문제다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string solution(string a, string b) {
    string answer = "";

    // 자릿수를 맞추기 위해 짧은 문자열 앞에 0을 추가
    int lenA = a.length();
    int lenB = b.length();

    if (lenA < lenB) {
        a.insert(0, lenB - lenA, '0'); // a가 짧으면 앞에 0을 추가
    } else {
        b.insert(0, lenA - lenB, '0'); // b가 짧으면 앞에 0을 추가
    }

    // 올림수를 저장할 변수
    int carry = 0;

    // 끝자리부터 두 숫자를 더하기
    for (int i = a.length() - 1; i >= 0; i--) {
        int sum = (a[i] - '0') + (b[i] - '0') + carry; // 각 자리의 숫자와 carry를 더함
        carry = sum / 10;  // 10을 넘으면 다음 자릿수로 올림
        answer.push_back((sum % 10) + '0'); // 결과의 현재 자리수를 저장
    }

    // 마지막으로 남은 carry 처리
    if (carry > 0) {
        answer.push_back(carry + '0');
    }

    // 결과 문자열이 뒤집혀 있으므로 다시 뒤집기
    reverse(answer.begin(), answer.end());

    return answer;
}
profile
성장하며 꿈꾸는 삶을 살아가고 있는 대학생입니다😊

0개의 댓글