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

 

이번에 볼 문제는 백준 26711번 문제인 A+B이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/26711 

 

26711번: A+B

Mamy dla was zadanie stare jak świat, ale w nieco odświeżonej wersji. Polega ono na dodaniu do siebie dwóch liczb, które tym razem mogą być dość duże. Gdyby tylko na Potyczkach Algorytmicznych było jakieś narzędzie, które pomaga radzić sobie

www.acmicpc.net

문제의 입력의 크기(5000자리 정수)에 유의하자. 두 정수를 C++의 정수자료형으로 단순하게 읽는 것은 어려우므로, 두 정수를 문자열을 읽고 덧셈을 처음 배웠을 때 계산하듯 일의 자리부터 한 자리씩 값을 계산해 문제의 답을 구해내자.

 

글쓴이는 작업 전 두 문자열의 길이를 "0"을 붙이는 것으로 같게 해주고 마지막자리부터 계산하는 것으로 문제를 해결했다.

 

임의의 자릿수의 정수 자료형을 지원하는 언어를 이용하면 더욱 쉽게 구현할 수 있을 것이다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef long long ll;

int N;
string A, B, ans;
int carry;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> A >> B;
	reverse(A.begin(), A.end());
	reverse(B.begin(), B.end());

	while (A.length() < B.length()) A += "0";
	while (B.length() < A.length()) B += "0";
	int N = A.length();

	for (int i = 0; i < N; i++) {
		int cur = A[i] - '0' + B[i] - '0' + carry;
		if (cur > 9) carry = 1, cur -= 10;
		else carry = 0;
		ans += cur + '0';
	}

	if (carry) ans += '1';
	reverse(ans.begin(), ans.end());

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 13698 // C++] Hawk eyes  (0) 2022.12.24
[BOJ 5346 // C++] Frodo Sequence  (0) 2022.12.23
[BOJ 26516 // C++] Mutint  (0) 2022.12.23
[BOJ 20112 // C++] 사토르 마방진  (0) 2022.12.23
[BOJ 17828 // C++] 문자열 화폐  (0) 2022.12.23

+ Recent posts