백준 10757 큰 수 A + B

2021. 2. 3. 15:55· 알고리즘/백준(BOJ)
반응형

이 문제는 C/C++ 에서 큰 정수를 다루는데 어떻게 다룰 수 있는지 배울 수 있는 문제이다.

 

C/C++에서 담을 수 있는 정수형 자료형으로는 택도 없이 부족한 큰 두 수가 주어진다.

 

그럴 때 정수를 문자열로 입력 받아서 문자형으로 해결할 수 있다.

 

나의 접근법은 문자열을 끝에서부터 한 자리씩 int 형으로 변환하여 더해주어 10이 넘어가면 올려주고, 안 넘어가면 그대로 두는 방식을 택했다.

 

이 때 문자열의 한 글자를 떼어보면 char형으로 분류되고 이를 int 형으로 변환하려 하면 해당 문자의 ASCII 코드의 정수값으로 변환되어 계산이 된다. 이 때문에 char를 int형으로 변환하기전에 '0' 으로 빼주면 ASCII 코드 표에서 상대적인 한 자리 정수값을 구할 수 있다.

 

이렇게 한 자리씩 계산한 다음 10을 넘어가면 rest 변수를 1로 설정해주어 다음 자리 수에서 더해지게 되고 안 넘어가면 rest 변수를 0 으로 설정해주어서 다음 자리 수에서도 계산이 되더라도 아무 영향을 주지 않도록 하였다.

 

이렇게 계산하고 한 가지 예외 처리를 해주자면, 맨 첫 자리까지 더해주었을 때에도 10이 넘어갔을 때 출력하고자 하는 문자열에 1을 추가해주어 종료하였다.

 

이렇게 풀면 해결된다.

#include <iostream>
#include <string>

using namespace std;

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

    string A, B;
    
    cin >> A >> B;

    int rest = 0;
    string s;
    int as = A.size() - 1;
    int bs = B.size() - 1;
    
    while(as >= 0 || bs >= 0){
        int temp_sum;
        if(as >= 0 && bs >= 0)
            temp_sum = int(A[as] - '0') + int(B[bs] - '0') + rest;
        if(as >= 0 && bs < 0)
            temp_sum = int(A[as] - '0') + rest;
        if(bs >= 0 && as < 0)
            temp_sum = int(B[bs] - '0') + rest;
        
        if(temp_sum >= 10){
            s.push_back(char(temp_sum % 10) + '0');
            rest = 1;
        }
        else
        {
            s.push_back(char(temp_sum) + '0');
            rest = 0;
        }

        as--;
        bs--;

        if(as < 0 && bs < 0 && temp_sum >= 10)
            s.push_back('1');
    }

    
    for(int i = s.size() - 1; i >= 0; i--){
        cout << s[i];
    }

    return 0;
}
반응형

'알고리즘 > 백준(BOJ)' 카테고리의 다른 글

백준 2775 부녀회장이 될테야  (0) 2021.02.04
백준 18258 큐2  (0) 2021.02.03
백준 1193 분수찾기  (0) 2021.02.02
백준 2869 달팽이는 올라가고 싶다  (0) 2021.02.01
백준 2292 벌집  (0) 2021.02.01
'알고리즘/백준(BOJ)' 카테고리의 다른 글
  • 백준 2775 부녀회장이 될테야
  • 백준 18258 큐2
  • 백준 1193 분수찾기
  • 백준 2869 달팽이는 올라가고 싶다
오뚜깅
오뚜깅
오뚜깅
오뚜깅
오뚜깅
전체
오늘
어제
  • 분류 전체보기
    • 취업인생
    • Programming
      • C & C++
      • Python
      • OpenCV
      • PCL
      • ROS
      • Deep learning
      • Network
    • 알고리즘
      • 이론
      • 백준(BOJ)
      • 프로그래머스(Programmers)
    • Project
    • IT
      • 우분투
    • 일상
      • 말씀 묵상
      • 끄적임
      • 영어 일기

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • cuda설치
  • cudaversion
  • installcudnn
  • 2292
  • c++code
  • C++
  • 백준2798
  • clustering
  • 딥러닝환경구축
  • installcuda
  • OtsuAlgorithm
  • 사용자지정정규화공식
  • PointCloudLibrary
  • 백준2231
  • imageclustering
  • cv_bridge
  • 오츠알고리즘
  • opencv
  • kmeansclustering
  • tensorflowversion
  • graphicdriver
  • pointcloud
  • cuda9.0
  • pytorch
  • CUDA
  • DeepLearning
  • CuDNN
  • 우분투
  • installubuntu
  • rospy

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
오뚜깅
백준 10757 큰 수 A + B
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.