본문 바로가기

알고리즘

[코드업] 3021 - 큰 수 덧셈

두 큰 수(BigInteger)에 대해서는 숫자를 문자열로 받아와 뒤집어서 처음부터 마지막까지 모조리 한 자리씩 더한 다음에, 10이 넘는 자리마다 자리올림을 수행해주면 된다.

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;

vector<int> zeroJustify(vector<int> str) {
	vector<int>::iterator f_iter;
	for (auto iter = str.end() - 1; iter >= str.begin(); iter--) {
		if (*iter != 0) {
			f_iter = iter;
			break;
		}
		if (iter == str.begin() && *iter == 0) {
			f_iter = str.begin();
			break;
		}
			
	}
	str.erase(++f_iter, str.end());

	reverse(str.begin(), str.end());
	return str;
}

vector<int> addBigInteger(string num1, string num2) {
	if (num2.size() > num1.size()) swap(num1, num2);
	vector<int> tmp(num1.size() + 1);
	
	for (int i = 0; i < num2.size(); i++) 
		tmp[i] = (num1[i] - '0') + (num2[i] - '0');
	for (int i = num2.size(); i < num1.size(); i++) 
		tmp[i] = (num1[i] - '0');

	for (int i = 1; i < tmp.size(); i++) {
		tmp[i] += tmp[i - 1] / 10;
		tmp[i - 1] %= 10;
	}

	return tmp;
}

int main() {
	string A, B;
	cin >> A >> B;
	reverse(A.begin(), A.end());
	reverse(B.begin(), B.end());

	for (int elem : zeroJustify(addBigInteger(A, B)))
		cout << elem;

	return 0;
}

참고로 파이썬에서는 BigInteger에 대한 개념이 내장되어있어 편하다.

# 이 코드는 파이썬에서 작동합니다.
a = int(input())
b = int(input())

print(a+b)

'알고리즘' 카테고리의 다른 글

[코드업] 3712 - 블럭 채우기 2  (0) 2020.02.29
[코드업] 3709 - 블럭 채우기 1  (0) 2020.02.29
[코드업] 3500 - 지뢰 찾기 2  (0) 2019.12.28
[코드업] 2102 - 배수(hard)  (0) 2019.11.30
[백준] 2468 - 안전 영역  (0) 2019.11.30