www.acmicpc.net/problem/15353

 

15353번: 큰 수 A+B (2)

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net


  • 단순하게 제공되는 덧셈 연산으로 불가능한 두 수를 더하는 문제
  • 숫자로써 연산이 불가능하다면, 문자열로써 처리를 해서 직접 사칙연산을 처리하게 한다.
  • 각 자릿수를 더해주고, 다음 자릿수에 올림처리를 해주는 과정을 반복하면 두 문자열의 덧셈 처리가 가능하다.

#include <iostream>

using namespace std;

string plused(string a, string b)                       // 두 문자열을 입력받아 더한 값을 문자열로 반환해주는 함수
{
    string temp = "";                   // 결과값 문자열
    int digitUp = 0;                    // 더할 때 자릿수 올림 처리
    while(a.size() != b.size())                         // 두 문자열의 자릿수를 똑같이 맞춰준다. (작은 값을 앞에 0을 붙여서)
    {
        if(a.size() < b.size())
        {
            a = '0' + a;
        }
        else
            b = '0' + b;
    }
    for(int i = a.size() - 1, k ; i >= 0 ; i--)         // 1의자리부터 시작해서 더해나간다
    {
        k = (a[i] - '0') + (b[i] - '0') + digitUp;      // 해당 자릿수 두개를 더함 (이전 자릿수에서의 올림처리도 같이해줌)
        if(k >= 10)
        {                                               // 10 이상일 경우 다음 자릿수 올림 처리
            digitUp = 1;
            k -= 10;
        }
        else
        {
            digitUp = 0;
        }
        temp = char(k + '0') + temp;                    // 결과 문자열에 해당 자릿수 더해줌
    }
    if(digitUp == 1) temp = '1' + temp;                 // 마지막 자릿수에서 올림이 있었다면 맨 앞에 또 올림처리
    return temp;
}

int main(void)
{
    string a, b;
    cin >> a >> b;
    cout << plused(a,b) << endl;
}

'PS > BOJ' 카테고리의 다른 글

[백준] 15652.cpp : N과 M (4)  (0) 2020.07.23
[백준] 2407.cpp : 조합  (0) 2020.07.22
[백준] 16566.cpp : 카드 게임  (0) 2020.07.19
[백준] 15650.cpp : N과 M (2)  (0) 2020.07.17
[백준] 16236.cpp : 아기 상어  (0) 2020.07.16

+ Recent posts