본문 바로가기
알고리즘/백준

[백준 15353] 큰 수 A+B (2) (C++)

by fortissimo 2024. 11. 29.

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

문제


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

 

입력


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

 

출력


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

 

문제 풀이


문자열 문제.

 

덧셈 문제이지만 범위가 long long 타입을 넘어서기 때문에 A와 B를 문자열로 입력받아 직접 덧셈을 구현해야 한다. 자릿수가 작은 쪽의 앞에 0을 삽입하여 두 숫자의 자릿수를 맞춘 후, 일의 자리부터 연산을 한다. 해당 자릿수 덧셈이 10이 넘으면 다음 자릿수에 1을 더해주면 되고, 일의 자릿수부터 맨 마지막 자릿수까지 연산을 끝낸 후에는 맨 마지막 자릿수 덧셈이 10이 넘었는지 확인한다. 넘었다면 정답을 저장하는 문자열의 맨 처음에 1을 삽입해준다.

 

아래는 코드.

더보기
#include <iostream>
#include <string>
using namespace std;

string add(string str1, string str2)
{
	int N = str1.length();
	int M = str2.length();
	int counts = max(N, M);
	bool isOver = false;
	string answer = "";
	if (N < M)
	{
		for (int i = 0; i < (M - N); i++)
		{
			str1.insert(0, "0");
		}
	}
	else if (N > M)
	{
		for (int i = 0; i < (N - M); i++)
		{
			str2.insert(0, "0");
		}
	}
	for (int i = 0; i < counts; i++)
	{
		int a = str1.at(counts - 1 - i) - 48;
		int b = str2.at(counts - 1 - i) - 48;
		int temp = a + b;
		if (isOver)
		{
			temp++;
		}
		isOver = false;
		if (temp >= 10)
		{
			temp -= 10;
			isOver = true;
		}
		answer.insert(0, to_string(temp));
	}
	if (isOver == true)
	{
		answer.insert(0, "1");
	}
	return answer;
}

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

	string str1, str2;
	cin >> str1 >> str2;
	cout << add(str1, str2);
	return 0;
}