A, B = input().split() res = int(A)/int(B) print(res)
이 문제는 다른 연산 문제와 다르게 소수점 아래 몇자리까지 출력해야 하는지 조절을 해야한다. 파이썬에서는 그냥 나눗셈(/
)연산을 하면 소수점 아래 16자리까지 출력이 된다. 그래서 문제에서 요구하는 상대오차 10-9을 만족하기 때문에 신경쓰지 않아도 된다.
#include <iostream> #include <iomanip> using namespace std; int main() { double A, B; cin >> A >> B; cout << setprecision(10) << A / B; }
처음 풀이할 때는 소수점 컨트롤이 힘들어서 여러 풀이를 찾아보며 공부했다.
그러다 setprecision()
이라는 함수를 알게 되었다.
이 함수는 iomanip
이라는 헤더파일에 포함되어있는데 부동 소수점을 몇번째 자리까지 표기할 것인지 설정해 주는 함수이다. 이 문제는 A와 B가 둘 다 1부터 9까지만 가질 수 있으므로 몫이 9를 넘어갈 수 없다. 즉, 정수부가 한자리 수이므로 부동 소수점으로 표현해도 상대오차 10-9를 만족할 수 있다. 참고로 고정 소수점으로 표현하기 위해서는 다음과 같이 구현하면 된다.
#include <iostream>
using namespace std;
int main()
{
int A, B;
cin >> A >> B;
cout << fixed; // 표준 출력을 고정 소수점으로 하겠다는 뜻
cout.precision(9); // 소수점 아래 9자리까지 출력. 참고로 소수점 아래 9번째 자리까지 반올림을 한다.
cout << (double)(A/B);
}
fixed
는 출력을 고정 소수점으로 한다는 함수이다.
precision(9)
는 소수점 아래 9번째 자리까지 표현한다는 함수이다.
아래 코드는 C언어 표준입출력 라이브러리인 stdio.h
를 사용하여 구현한 코드이다.
#include <stdio.h>
//using namespace std;
int main()
{
double A, B;
scanf("%d%d",&A,&B); // A와 B를 입력받는다.
printf("%.9lf",A/B); // "%.9lf"는 소수점 아래 9번째까지 출력하게 해주는 서식 지정자이다. %lf 는 double형 변수를 받아올 때 사용한다.
}