반응형
문제는 다음과 같습니다.
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 |