[C] 백준 1008번 : A/B 연습

2020. 5. 30. 00:17

 

 

나눗셈 계산 연습하기 문제.

1008번 문제는 아래와 같다.

 

 

백준 문제 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 이상으로만 처리하면 맞았다고 판정한다고 한다. 

 

지정자 개념은 아직도 헷갈리고 어렵다..

 

BELATED ARTICLES

more