※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 15353번 문제인 큰 수 A+B (2)이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/15353
15353번: 큰 수 A+B (2)
C++17, C11, C99, C++98, C++11, C++14, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang)
www.acmicpc.net
두 큰 정수의 덧셈을 구현해보는 문제이다.
글쓴이는 string을 이용하여 구현해보았다.
먼저 두 수중 더 짧은 수에 leading zero를 채워넣어(앞에 0을 채워) 길이를 같게 만들어주고, 1의 자리부터 받아올림을 해나가면서 한 자리씩 계산해나가는 것으로 문제를 해결할 수 있다.
받아올림으로 자릿수가 하나 더 늘어날 수 있다는 점을 신경써주자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string temp = "";
string s1, s2; cin >> s1 >> s2;
int s1len = s1.length(), s2len = s2.length();
if (s1len < s2len) {
int K = s2len - s1len;
while (K--) temp += "0";
s1 = temp + s1;
s1len = s2len;
}
else {
int K = s1len - s2len;
while (K--) temp += "0";
s2 = temp + s2;
s2len = s1len;
}
string ans = "";
int carry = 0;
for (int i = s1len - 1; i >= 0; i--) {
int tmp = (int)s1[i] - '0' + (int)s2[i] - '0' + carry;
if (tmp > 9) carry = 1;
else carry = 0;
ans += to_string(tmp % 10);
}
if (carry) cout << 1;
for (auto iter = ans.rbegin(); iter != ans.rend(); iter++) cout << *iter;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2448 // C++] 별 찍기 - 11 (0) | 2021.11.24 |
---|---|
[BOJ 5639 // C++] 이진 검색 트리 (0) | 2021.11.23 |
[BOJ 10986 // C++] 나머지 합 (0) | 2021.11.21 |
[BOJ 16532 // C++] Looking for the Risk Factor (0) | 2021.11.20 |
[BOJ 17425 // C++] 약수의 합 (0) | 2021.11.19 |