티스토리 뷰

알고리즘/백준

백준 / 10757 큰수 A+B C++

4567은 소수 2021. 1. 29. 02:08

www.acmicpc.net/problem/10757

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

브론즈 문제이지만 잠이 와서 한 번 풀어보았습니다.

파이썬의 경우 해당 범위가 1만자리 수이므로 덧셈을 할 수 있습니다. 

하지만 나머지 언어의 경우 보통 이런 경우 string으로 처리하여 계산하면 됩니다.

 

덧셈의 원리인 뒤에서부터 더하면서 올림자리가 있는지 판단하기만 하면 됩니다. 

 

코드는 다음과 같습니다.

#include<iostream>
#include<algorithm>
#include<string>

using namespace std;

string add(string a, string b) {
	string result = "";

	if (a.size() != b.size()) {
		string zeros = "";

		if (a.size() < b.size()) {
			for (int i = 0; i < (b.size() - a.size()); i++)
				zeros += '0';
			a.insert(0, zeros);
		}

		else {
			for (int i = 0; i < (a.size() - b.size()); i++)
				zeros += '0';
			b.insert(0, zeros);
		}
	}

	int size = a.size();
	int tmp = 0;
	for (int i = size - 1; i > 0; i--) {
		int x = a[i] - '0';
		int y = b[i] - '0';
		if (x + y + tmp >= 10) {
			result += (char)('0' + (x + y + tmp - 10));
			tmp = 1;
		}
		else {
			result += (char)('0' + (x + y + tmp));
			tmp = 0;
		}
	}

	int last = (a[0] - '0') + (b[0] - '0') + tmp;
	string last_s = to_string(last);
	reverse(last_s.begin(), last_s.end());
	result += last_s;
	reverse(result.begin(), result.end());

	return result;
}


int main()
{
	string a, b;
	cin >> a >> b;
	cout << add(a, b);
}

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 / 11657 타임머신 C++  (0) 2021.02.02
백준 / 15684 사다리 조작 C++  (0) 2021.02.01
백준 / 1516 게임 개발 C++  (0) 2021.01.28
백준 / 2470 두 용액 C++  (0) 2021.01.22
백준 / 1927 최소 힙 C++  (0) 2021.01.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함