[C] 백준 1008번 : A/B 연습
2020. 5. 30. 00:17
나눗셈 계산 연습하기 문제.
1008번 문제는 아래와 같다.
처음에는 예제 출력에서 실수형으로 출력이 되는 것 같아 다음과 같이 작성을 했다.
#include <stdio.h>
int main(){
int A;
int B;
float value;
scanf("%d %d", &A, &B);
if(0 < A && A < 10 && 0 < B && B < 10){
value = A/B;
printf("%f", value);
}
else{
printf("ERROR");
}
}
제출을 해보니 틀렸다고 떠서 Dev c++에서 위의 코드로 결과값을 확인해보았다.
위와 같이 결과값이 제대로 출력이 되지 않길래 혹시 A,B,value의 값들을 모두 double형으로 선언해야하는가 싶어서 다시 다음과 같이 짜보았다.
#include <stdio.h>
int main(){
double A;
double B;
double value;
scanf("%d %d", &A, &B);
if(0 < A && A < 10 && 0 < B && B < 10){
value = A/B;
printf("%lf", value);
}
else{
printf("ERROR");
}
}
이 코드를 다시 Dev c++에서 확인해보니 다음과 같은 결과값이 나왔다.
0.333333 으로 출력이 되긴 하지만 예제출력에 나왔던 것처럼 소수점 아래의 자리가 20자리 이상씩 출력되지는 않는다.
역시나 백준에 제출을 해보았을 때도 오답으로 처리되었었다.
어떻게 수정해야할지 잘 모르겠어서 여기저기 검색을 해보니 소수점 아래의 자릿수를 지정해주면 된다는 풀이를 보았다.
그래서 다음과 같이 코드를 수정해보았다.
#include <stdio.h>
int main(){
double A;
double B;
double value;
scanf("%d %d", &A, &B);
if(0 < A && A < 10 && 0 < B && B < 10){
value = A/B;
printf("%.12lf", value);
}
else{
printf("ERROR");
}
}
다시 백준에 제출해보니 드디어 정답 !!
조금 더 찾아보니 문제에서 상대오차가 10^-9 이하이면 정답 처리를 한다고 했기 때문에 %0.9lf 이상으로만 처리하면 맞았다고 판정한다고 한다.
지정자 개념은 아직도 헷갈리고 어렵다..
'Programming > BOJ' 카테고리의 다른 글
[C] 백준 2439번 : 별 찍기 - 2 (0) | 2020.06.02 |
---|---|
[C] 백준 10950번 : 정수를 입력받은 후 합 출력 (0) | 2020.06.01 |
[C] 백준 2884번 : 알람시계 맞추기 (0) | 2020.05.30 |
[C] 백준 2753번 : 윤년 (0) | 2020.05.30 |
[C] 백준 2588번 : 세자리수 곱셈 (0) | 2020.05.30 |