두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오.
문제 보기
두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000)
첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%B를 출력한다.
#include<iostream>
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int a = 0, b = 0;
std::cin >> a >> b;
std::cout << a + b << '\n'; // 덧셈
std::cout << a - b << '\n'; // 뺄셈
std::cout << a * b << '\n'; // 곱셈
std::cout << a / b << '\n'; // 나누기
std::cout << a % b; // 나눈 나머지
return 0;
}
::
는 이름공간(namespace)라고하며, 개체를 구분할 수 있는 범위를 나타낸다. 일반적으로 같은 공간안에서는 하나의 이름이 단 하나의 개체만을 가리키게 된다.
std::ios::sync_with_stdio()
는 C++ 표준 스트림들이 C 표준 스트림들과 각각의 입출력 연산 후에 동기화 할지 여부를 설정하는 것을 말한다. 동기화를 껐을 경우 C 입출력 연산과 C++ 입출력 연산을 같이 사용한다면, 그 입출력 순서들이 보장되지 않는다.
다만 동기화를 설정하지 않았더라면, 표준 C++ 스트림들은 각각의 입출력 연산에 대해 버퍼를 사용할 수 있는데, 이 경우 입출력 연산 속도를 크게 향상 시킬 수 있다.
동기화를 껐을 경우 속도의 이점은 있겠지만, scanf와 printf를 cin, cout과 섞어 쓰지 말고, 싱글 쓰레드 환경에서만 사용할 것!
std::cin.tie(NULL)
, std::cout.tie(NULL)
의 경우 null값으로 설정해서 서로 묶여있는 것을 풀어준다는 것, 묶인 스트림은 한 스트림이 다른 스트림에서 각 I/O 작업 전에 자동으로 플러시(flush - 즉, 콘솔에 표시) 되도록 한다. 합리적인 사용자 상호 작용을 보장하기 위해 기본적으로 cin은 (는) cout에 연결되어 있다.
std::cout << "hello";
std::cin >> name;
cin과 cout이 묶여 있으면, 프로그램이 사용자에게 입력을 요청하기 전에 순서대로 출력이 플러시될 것으로 예상이 가능하다.
묶여있는 것을 풀게되면, 프로그램 출력이 플러시되지 않고, 사용자에게 name 입력을 요구하게 되고 "hello"메세지가 아직 보이지 않는다.
cout이 기본적으로 버퍼링 되어 있기 때문에 출력은 콘솔에서만 플러시하여 표시된다.
버퍼가 가득차거나 수동적으로 플러시를 시켜주기 전까지는 출력되지 않는다.
visual studio 17에서 실행해본 결과 콘솔에서는 순서에 맞게 hello가 출력되고 입력을 요청 받는 것을 확인했다. 콘솔이 아닌 환경에서는 설명대로 입력 요청을 먼저 받게 되려나?
참고 자료 및 사이트 (감사합니다)