#include <bits/stdc++.h>

표준 라이브러리 전체를 포함시키는 g++컴파일러의 기능이다. 이 것을 사용하면 iostream, vecotr, algorith 등의 라이브러리를 개별적으로 포함시키지 않다도 사용가능하다.

 

 

string s;

getline(cin, s)

입력 한줄을 통째로, 공백을 포함한 채로 읽어 들이는 방법

 

 

while(cin >> x)

만일 데이터의 양을 사전에 알수 없다면 사용.

 

 

freopen("input.txt", "r", stdin);

freopen("output.txt", "w", stdout);

몇몇 대회 시스템은 입력과 출력을 위해 파일을 사용하기도 한다. 이를 간단하게 처리하는 방법은 평소처럼 표준스트림을 사용하는 코드를 작성한 후, 위 두줄을 코드의 시작 부분에 추가한다.

 

 

ios::sync_with_stdio(0);

cin.tie(0);

코드 시작부분에 위 코드를 넣으면 입력과 출력을 좀더 효율적으로 할 수 있다.

단, 이코드를 사용했을 때는 scanf, printf와 같은 C언어 입출력 함수를 C++입출력 함수와 동시에 사용할 수 없다.

 

"\n" vs endl

개행 문자 "\n"는  endl보다 빠르다. 이는 endl을 상ㅇ하면 명시적으로 flush가 일어나기 때문이다.

 

 

long long x = 123456789123456789LL;

int 범위(32bits) = -2 * 10의 9승 ~  2 * 10의 9승

long long범위(64bits) = -9 * 10의 18승 ~ 9 * 10의 18승

 

 

int a = 123456789;

long long b = a*a;

cout << b << "\n";  //-1757895751

"a*a"를 저장하는 변수는 long long이지만, 계산은 결과가 int으로 되기때문에 에러를 유발한다.

a자료형을 long long으로 바꾸던지, (long long )a*a 으로 코드를 수정해야 한다.

 

나머지 연산 - skip

 

 

if(abs(a-b) < 1e-9){

     // a와 b가 일치한다

}

부동 소수점 실수를 == 연산자를 이용하여 비교하는 것은 위험한데, 이는 비교하는 값이 실제로는 일치하지만, 정밀도 오류로 인해 다르다는 결과가 나올 수도 있기 때문이다. 좀더 나은 방법은 두 실수의 차이가 x보다 작을 때 서로 일치한다고 판단하는 것이 좋다.

 

 

 

 

+ Recent posts