문제 링크 https://www.acmicpc.net/problem/10757

문제

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

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

출력

첫째 줄에 A+B를 출력한다.

풀이 과정

브론즈 5문제이지만, 파이썬이나 자바로 풀지 않을 경우 난이도가 상승하는 문제다.

최대 10000 자리까지 될 수 있기 때문에 string으로 입력을 받아준다.
문자열의 길이를 비교해 s1이 항상 크게 해주며 두 문자열을
각각 int 배열에 거꾸로 넣어준다.

각 자리의 수를 더한 것을 sum에 넣고 만약 10이 넘어간다면
다음 자리는 올림을 해준 뒤, sum은 10을 빼주며 res 벡터에 넣는다.

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

int num1[10001], num2[10001], sum;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	string s1, s2;
	cin >> s1 >> s2;
	if (s1.size() < s2.size()) swap(s1, s2);

	for (int i = 0; i < s1.size(); i++) {
		num1[i] = s1[s1.size() - 1 - i] - '0';
	}
	for (int i = 0; i < s2.size(); i++) {
		num2[i] = s2[s2.size() - 1 - i] - '0';
	}

	vector<int> res;
	for (int i = 0; i < s1.size(); i++) {
		sum = num1[i] + num2[i];
		if (sum >= 10) {
			num1[i + 1]++;
			sum -= 10;
		}
		res.push_back(sum);
	}

	bool flag = true;
	if (num1[s1.size()] != 0) cout << 1; // 올림수가 있을 때
	else { // 올림수가 없는데 첫 자리가 0 일때 ex) 002 + 002 = 004 (x)
		if (res[res.size() - 1] == 0) flag = false;
	}
	for (int i = res.size() - 1; i >= 0; i--) {
		if (res[i] != 0) flag = true;
		if (flag) cout << res[i]; // 첫 자리가 0이 아닌 수부터 시작
	}
}

댓글남기기