백준 문제풀이

10757 번 : 큰 수 A+B

하다블 2023. 4. 26. 18:13
반응형

문제는 다음과 같습니다.

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

 

10757번: 큰 수 A+B

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

www.acmicpc.net

풀이 코드는 다음과 같습니다.

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

int main()
{
	string s1,s2;
	string s3="";
	string s4="";
	string result="";
	cin>>s1>>s2;
	int size=max(s1.size(),s2.size());
	while(size-s1.size()-s3.size()!=0)
	{
		s3+="0";
	}
	s3+=s1;
	while(size-s2.size()-s4.size()!=0)
	{
		s4+="0";
	}
	s4+=s2;
	int more{0};
	for(int i{s3.size()-1};i>=0;i--)
	{
		int s3_num=s3[i]-'0';
		int s4_num=s4[i]-'0';
		int temp=s3_num+s4_num+more;
		if(temp>=10)
		{
			temp-=10;
			more=1;
		}
		else
		{
			more=0;
		}
		result+=to_string(temp);
	}
	if(more==1)
	{
		result+="1";
	}
	reverse(result.begin(),result.end());
	cout<<result;
}

보시는 것과 같이 범위가 어마어마하게 큰 수입니다. 숫자로만 찍어도 10 뒤에 0이 1만 개 정도 있다고 생각하면 됩니다.

(자기소개서도 1만자씩 안 적는 것 같은데 말이죠)

따라서 입력받는 변수가 int뿐 아니라 long 타입으로도 받을 수 없는 수입니다. 따라서 문자열 타입인 string으로 받은 다음 한 자리씩 계산을 해야 합니다.

코드의 순서는

1. 두 숫자를 입력받는다.

2. 자릿수가 다르면 0을 붙여 자릿수를 조정한다. (while 문 2개)

3. 한자리 씩 계산을 한다. (for문)

4. 맨 마지막 수를 계산했을 때, 10이 넘으면 1을 더 붙여준다.(for문 이후의 if문)

범위가 적은 수들을 연산자로 쉽게 계산할 수 있음에 감사함을 느낄 수 있었던 문제였다고 생각합니다.

반응형

'백준 문제풀이' 카테고리의 다른 글

2501 번 : 약수 구하기  (0) 2023.04.26
5086 번 : 배수와 약수  (0) 2023.04.26
2869 번 : 달팽이는 올라가고 싶다  (0) 2023.04.26
2903 번 : 중앙 이동 알고리즘  (0) 2023.04.25
2292 번 : 벌집  (0) 2023.04.25