백준10757번: 큰수 A+B

Johnny Lee·2023년 4월 6일
0

백준 1일1제

목록 보기
9/14

인트로:

오늘 백준 단계별로 풀어보기 수학파트를 풀려고 문제들을 보다가 등급이 가장 낮은 브론즈5등급인 백준 10757번의 큰수 A+B를 풀기로 했다.

문제:

문제해석:

말 그대로 엄청난 큰수가 들어올 때, 이 두 숫자를 합을 구하는 문제이다. 숫자가 굉장히 크기 때문에 일반적인 longlong과 같은 자료형을 쓸수가 없어, 문자형 str 을 사용하여 문제를 풀어보았다.

코드:

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

int main() {
  string a, b;
  cin>> a >> b;
  
  int a_length = a.length();
  int b_length = b.length();

  if(a_length > b_length){
    swap(a,b);
    swap(a_length, b_length);
  }
  string tmp = "";
  if (a_length != b_length){ //두 숫자의 길이가 다를경우 
    for (int i = 0; i < (a_length - b_length); i++)
      tmp += "0";
    }
  b = tmp+b;
  
  string result = "";
  int round = 0; //반올림
  int x, y, digit; 
  for (int i=a_length-1; i>=0; i--){ //맨 뒷자리부터 더하기
    x = a[i] - '0'; //여기서 0을 뺴주면 문자를 숫자로 바꿀수 있음(첨암)
    y = b[i] - '0';
    digit = x + y;
    if (round == 1) {
      digit++;
      round = 0;
    }
    if (digit > 9) //만약 숫자가 9보다 클 경우 반올림을 해준다. 
      round = 1;
      result += digit%10 + '0';
    }
  if (round == 1) //반올림을 해주기
    result += "1";
  for (int i=result.length() - 1; i>=0; i--){
    cout << result[i];
  }
}

느낀점

문자열로 풀어보려는것까지는 시도했지만, 반올림과, 만약 입력받은 숫자의 길이가 다를경우 줄맞춤 부분에서 많은 어려움을 느꼈고, 블로그를 참고하였다. 내가 문자열에 대해서 많이 부족하다는것을 느끼게 해준 문제였다.그리고 이 문제는 체감상 브론즈 5등급 문제는 아닌 것 같다.
그리고 -'0'을통해서 문자열을 숫자로 바꿀수 있는것을 이번에 첨 알았다.

링크텍스트

profile
You can always be better

0개의 댓글