N

(SWEA c++)3260. 두 수의 덧셈 본문

SW Expert Academy

(SWEA c++)3260. 두 수의 덧셈

naeunchan 2020. 11. 2. 10:48
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWBC1lOad9IDFAWr&categoryId=AWBC1lOad9IDFAWr&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

주어지는 수가 INT형으로는 표현하지 못하는 수다.

그렇기 때문에 string으로 변환하여 string 형태로 정답을 반환해주면 된다.

 

우선 두 수를 string형 변수 a, b에 넣어주도록 한다.

그리고 두 수의 자릿수를 비교하여 작은 쪽을 a, 큰 쪽을 b로 해준다.

자릿수가 다르면 a의 자릿수를 b 만큼 '0'을 넣어 같도록 맞춰준다.

 

int형 변수 up은 올림값이고, sum은 각 자릿수를 더한 값을 나타낸다.

만약 up + a의 현재 자릿수의 값 + b의 현재 자릿수의 값이 10이 넘어가면 앞 자리에 1을 더해야 하기 때문에

up = 1로 바꿔주고, ans 변수에 (sum - 10)을 뺀 값을 넣어주도록 한다.

넣을 때는 string 형태로 저장해야 하기 때문에 + '0'을 해주도록 한다.

 

for문을 다 돌고나서 만약 up이 0이 아니라면 올림값이 남아있기 때문에 마지막에 '1'을 넣어주면 된다.

출력하기 전 reverse를 통해 ans를 뒤집어주면 답이 나온다.

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    int t;
    cin >> t;
    
    for(int tc = 1; tc <= t; tc++)
    {
        string a, b, ans = "";
        int up = 0, sum = 0;
        cin >> a >> b;
        
        if(a.size() > b.size())
            swap(a, b);
        
        for(int i = a.size(); i < b.size(); i++)
            a = '0' + a;
        for(int i = b.size() - 1; i >= 0; i--)
        {
            sum = up + (a[i] - '0') + (b[i] - '0');
            if(sum >= 10)
            {
                up = 1;
                ans.push_back(sum - 10 + '0');
            }
            else
            {
                up = 0;
                ans.push_back(sum + '0');
            }
        }
        if(up)
            ans.push_back('1');
        
        reverse(ans.begin(), ans.end());
        cout << "#" << tc << " " << ans << endl;
    }
    return 0;
}
728x90
반응형