1. 문제 상세
https://www.acmicpc.net/problem/1008
2. 문제 접근
기본적인 scanf 함수를 통해 입력을 받고, printf 함수를 통해 계산 값을 출력.
처음엔 변수를 그냥 냅다 정수형으로 선언하고 계산하여 출력해서 틀려버리고..
그 다음엔 float 로 선언했지만 문제의 조건을 생각하지 않았다.
결과 값을 10-9 이하의 오차로 결과를 출력해야 한다는 것..
float 자료형이 작다보니(4byte) 계산 결과의 오차 범위가 10-9 보다 커서
더 큰 자료형인 double 자료형(8byte)을 사용해야 했다.
그리고, 10-9 이하의 오차로 결과를 출력하기 위해 출력할 값은 소수점 9자리 이상으로 출력해야 한다는 것도 확인
3. 문제 풀이
#include <iostream>
int main() {
double A, B;
scanf("%lf %lf", &A, &B);
printf("%.9lf", A/B);
return 0;
}
실수형 변수 A, B를 만들고,
scanf 함수로 변수 A, B에 8byte 크기의 실수를 입력받아 저장한다.
printf 함수로 변수 A를 B로 나눈 값을 출력.
scanf 와 printf 에서 사용한 변수의 자료형이 double 이기 때문에 형식 지정자를 %lf 로 사용하였다.
printf 에서는 문제 접근에 말한 것처럼 소수점 9자리 이상 출력을 위해 형식 지정자를 사용할 때
%.nlf 형식으로 출력할 소수점 자리수를 n개로 고정, 즉 소수점 자리수를 9개로 고정하여서 출력하도록 했다.
4. 성능 확인
몇번을 틀린거야..그래도 이렇게 하고나면 까먹진 않겠다..
5. 마무리
이렇게 기본적인 사칙연산은 한번씩 완료.
일단 문제를 잘 읽자..그리고 나눗셈에서는 변수들의 자료형이 굉장히 중요하다는 것을 다시금 깨달았다,
자료형에 따라 오차가 크다..
float 자료형의 형식 지정자는 %f로, double 은 %lf 로 사용하기.
실수 자료형의 출력에서 %.nf 혹은 %.nlf 로 소수점 자리수를 n개로 고정하기.
'백준 - 단계별로 풀어보기 > 입출력과 사칙연산' 카테고리의 다른 글
[백준] 10926번 : ??! | C++ (0) | 2023.09.12 |
---|---|
[백준] 10869번 : 사칙연산 | C++ (0) | 2023.09.12 |
[백준] 10998번 : AxB | C++ (0) | 2023.09.11 |
[백준] 1001번 : A-B | C++ (0) | 2023.09.11 |
[백준] 2557번 : Hello World | C++ (0) | 2023.09.11 |