※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts