250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(SWEA c++)3260. 두 수의 덧셈 본문
728x90
반응형
주어지는 수가 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
반응형
'SW Expert Academy' 카테고리의 다른 글
(SWEA c++)3282. 0/1 Knapsack (0) | 2020.11.02 |
---|---|
(SWEA c++)3304. 최장 공통 부분 수열 (0) | 2020.11.02 |
(SWEA c++)3233. 정삼각형 분할 놀이 (0) | 2020.10.28 |
(SWEA c++)3142. 영준이와 신비한 뿔의 숲 (0) | 2020.10.27 |
(SWEA c++)3131. 100만 이하의 모든 소수 (0) | 2020.10.27 |