celina의 이것저것

[C++] 백준 10824번 - 네 수 본문

자료구조&알고리즘/백준

[C++] 백준 10824번 - 네 수

celinayk 2023. 1. 23. 22:20
반응형

문제

네 자연수 A, B, C, D가 주어진다. 이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성하시오.
두 수 A와 B를 합치는 것은 A의 뒤에 B를 붙이는 것을 의미한다. 즉, 20과 30을 붙이면 2030이 된다.

입력

첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000)

출력

A와 B를 붙인 수와 C와 D를 붙인 수의 합을 출력한다.

코드

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

int main() {
    
    string a, b, c, d;

    cin >> a>> b>> c>> d;

    long long x = stoll(a + b);
    long long y = stoll(c + d);
    
    cout << x + y; 
    
    return 0;
}

리뷰

두 수를 이어서 하나의 숫자로 만들고 더해야하는 문제라서 string문자열로 받은 후 문자열을 합치고 더해서 다시 숫자형으로 변환하면 될 것같아서 이 방법을 사용했다

c++에서 문자열은 훨씬 간단하게 쓸 수 있다

/*새롭게 알게된 c++ 문자열*/

string a
//문자열 생성

cin >> a;
//공백이전까지 문자열을 입력받음

이 두가지를 이용했다

먼저 문자열 a,b,c,d를 만들어서 숫자를 받은후 a,b와 c,d를 합쳐준다

그리고 숫자형을 변환하면됨

 

<에러>

int x = stoi(a + b);
int y = stoi(c + d);

숫자형으로 변환하는 과정에서 오류가 났다. 

런타임에러(out_of_range)가 떴다.

각 숫자의 범위는 1,000,000까지이고 이걸 합친다면 1,000,000,000,000이고 최대로 나올 수 있는값은

2,000,000,000이다 즉 1,000,000,000,000의 수는 int로 표현할 수 있는 범위를 넘어선다!!

게다사 stoi함수는 int형으로 변환하는것이고 이 경우에는 더 큰 범위인 long long으로 표현해야한다

long long은 stoll함수를 써서 해결했다 !!

 

학습

stoll와 stoi함수의 차이를 첨 알았다 그리고 문자열관련해서 c++은 좀 편리한것같다 문자열 관련해서도 문제를 풀어봐야겟다

출처 

10824번: 네 수 (acmicpc.net)

 

10824번: 네 수

첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000)

www.acmicpc.net

 

Comments