본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 10757번: 큰 수 A+B [C++]

문제 출처: www.acmicpc.net/problem/10757

 

10757번: 큰 수 A+B

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

www.acmicpc.net

1. 코드

#include <iostream>
#include <string>

using namespace std;

int main(void)
{
	string a, b;

	cin >> a >> b;
	string result(max(a.length(), b.length()), '0');
	int key = 0;

	for (int i = 0; i < result.length(); i++)
	{
		int sum = key;
		key = 0;

		if (i < a.size())
			sum += a[a.length() - i - 1] - '0';

		if (i < b.size())
			sum += b[b.length() - i - 1] - '0';
		
		if (sum > 9)
		{
			key = 1;
			sum -= 10;
		}
		
		result[result.length() - i - 1] = sum + '0';
	}
	if (key)
		cout << 1;
	cout << result;

    return 0;
}

(실행)

2. 풀이

string a, b;

cin >> a >> b;
string result(max(a.length(), b.length()), '0');
int key = 0;

문자열 a와 b에 두 수를 입력하고 a와 b 중 더 긴 길이인지 판별하고 그 길이만큼 '0'으로 채워준다. 그리고 key값을 0으로 초기화한다. key값이 1이라면 자릿수가 증가한다는 신호이니 0으로 초기화한다.

for (int i = 0; i < result.length(); i++)
{
    int sum = key;
    key = 0;

result의 길이만큼 반복을 하는데 우선 sum의 값을 key값으로 초기화를 진행하고 key값을 0으로 다시 초기화시켜준다.

if (i < a.size())
    sum += a[a.length() - i - 1] - '0';

if (i < b.size())
    sum += b[b.length() - i - 1] - '0';

sum값에 a의 마지막 순서에 위치한 배열부터 접근하여 '0'을 빼주는데 그 이유는 정수로된 문자를 다시 정수로 바뀌게 된다. 그러면 sum에는 배열에 저장되어있던 정수를 그대로 저장할 수 있다. 배열 b도 똑같이 해준다.

if (sum > 9)
{
    key = 1;
    sum -= 10;
}

그리고 만약 sum이 9를 초과하면 즉, 10 이상의 수가 된다면 key값을 1로 초기화하고 sum에는 10을 빼준다.

result[result.length() - i - 1] = sum + '0';

그리고 result의 마지막 순서부터 순차적으로 sum에 저장된 정수에 '0'을 더한 값으로 초기화해주는데 result은 문자열 배열이기 때문에 정수를 문자로 변환시켜준다.

if (key)
    cout << 1;

위 반복문이 끝이 났는데 key값이 1이라면 먼저 1을 출력을 해준다. 왜냐하면 result의 길이는 a혹은 b의 길이와 동일한데 key값이 1이라는 것은 자릿수가 증가했다는 것인데 한정된 길이에서 이 증가된 자릿수를 표현해줄 수 없기 때문에 증가된 1을 먼저 출력한다.

cout << result;

그리고 result을 출력해주면 정답이다.