백준 26711번 (A+B, C++) [BAEKJOON]

목차 테이블

A+B

https://www.acmicpc.net/problem/26711

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초1024 MB19501071102462.098%

문제

Mamy dla was zadanie stare jak świat, ale w nieco odświeżonej wersji.

Polega ono na dodaniu do siebie dwóch liczb, które tym razem mogą być dość duże.

Gdyby tylko na Potyczkach Algorytmicznych było jakieś narzędzie, które pomaga radzić sobie z dużymi liczbami…

오래된 퀘스트가 있지만 약간 새로워진 버전입니다. 

여기에는 두 개의 숫자를 함께 추가하는 작업이 포함되며 이번에는 상당히 클 수 있습니다. 

Algorithm Brawls에 큰 숫자를 다루는 데 도움이 되는 도구가 있었다면…

입력

W pierwszym wierszu wierszu standardowego wejścia znajduje się jedna dodatnia liczba całkowita a, która składa się z nie więcej niż 5 000 cyfr.

W drugim wierszu wierszu standardowego wejścia znajduje się jedna dodatnia liczba całkowita b, która składa się z nie więcej niż 5 000 cyfr.

Liczby a i b są podane bez zer wiodących.

표준 입력 라인의 첫 번째 라인에는 5,000자리 이하로 구성된 양의 정수 a가 하나 있습니다.

표준 입력 라인의 두 번째 라인에는 5,000자리 이하로 구성된 양의 정수 b가 하나 있습니다.

숫자 a와 b는 선행 0 없이 제공됩니다.

출력

W jedynym wierszu wyjścia powinien znaleźć się wynik dodawania a + b.

출력의 유일한 행은 a + b를 더한 결과여야 합니다.

예제 입력 1

1997
25

예제 출력 1

2022

출처

Contest > Algorithmic Engagements > PA 2022 0-1번

알고리즘 분류


위와 같은 문제

통과된 코드

#include <iostream>
#include <algorithm> // 알고리즘 해더파일이 없으면 백준에서 컴파일 오류가 난다. (reverse)

using namespace std;

// 두 문자열을 더해주는 함수
string SumString(string strA, string strB)
{
    string tempStr;

    // 두 문자열 중에서 가장 높은 인덱스 길이 찾음
    int maxLength = strA.length() > strB.length() ? strA.length() : strB.length();

    // 문자열을 뒤집어 준다.
    reverse(strA.begin(), strA.end());
    reverse(strB.begin(), strB.end());

    // 뒤집은 두 문자열의 인덱스를 맞추어 준다.
    for (int i = strA.length(); i < maxLength; i++) { strA.push_back('0'); }
    for (int i = strB.length(); i < maxLength; i++) { strB.push_back('0'); }

    int tempOne, tempTwo, tempThree;
    int up = 0;

    // 같은 인덱스의 char를 int로 변환하고 서로 더 해준다.
    // 만약 up 변수로 올림 처리를 해준다.
    for (int i = 0; i < maxLength; i++) {
        tempOne = 0;
        tempTwo = 0;
        if (i <= strA.length()) { tempOne = strA[i] - '0'; } // char => int
        if (i <= strB.length()) { tempTwo = strB[i] - '0'; } // char => int
        tempThree = tempOne + tempTwo + up;
        up = 0;

        if (tempThree >= 10) {
            tempThree -= 10;
            up += 1; // 올림처리
        }

        tempStr.push_back(tempThree + '0'); // int => char
    }

    if (up >= 1) { tempStr.push_back('1'); } // 올림이 남아있다면
    reverse(tempStr.begin(), tempStr.end()); // 더한 값을 뒤집어 준다.
    return tempStr;
}

int main()
{
    string tempOne, tempTwo;
    cin >> tempOne >> tempTwo;
    cout << SumString(tempOne, tempTwo);

    return 0;
}

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤