C.C++

백준 1008번 A/B (C/C++)

흔들어먹는공대생 2023. 1. 31. 00:16

1008 번 A/B

문제

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다.

예제 입력 1

1 3

예제 출력 1

0.33333333333333333333333333333333

10-9 이하의 오차를 허용한다는 말은 꼭 소수 9번째 자리까지만 출력하라는 뜻이 아니다.

예제 입력 2

4 5

예제 출력 2

0.8

 

소스코드

 

 

#include<stdio.h>

int main(){
    
    int A,B;
    scanf("%d %d",&A,&B);
    printf("%0.9lf",(double)A/B);

    
    return 0;
}
 

 


문제풀이 / 참고

썼던 오답들

1.

#include<stdio.h>

int main(){
    
    int A,B;
    scanf("%d %d",&A,&B);
    printf("%lf",A/B);

    
    return 0;
}

다음 결과 값은 0.000000 이다

다음 결과 값으로 나오는 이유는 A와 B가 int형이기 때문에 결과값이 int형으로 자동으로 저장된다.

계산 값을 소수로 저장하도록 하기위해서는 A/B앞에 double을 추가한다.

이때 double인 이유는 float은 소수점 이하 6자리, double은 15자리까지이기 때문이라고 한다.

주의할점 : (double)A/B가 아닌 (double)(A/B)로 작성하면 (A/B)가 정수로 먼저 계산된 후에 실수 형태로 변화 되기때문에 0.000000000로 나오게 된다.

2.

#include<stdio.h>

int main(){
    
    int A,B;
    scanf("%d %d",&A,&B);
    printf("%lf",(double)A/B);

    
    return 0;
}
 

1번의 문제를 고쳤다. 하지만 위 코드도 결과 값이 0.333333로 틀린다.

이 값이 왜 틀렸나?

-> double형은 특별한 서식이 없으면 6자리까지만 출력을 한다.

하지만 문제의 조건은 이렇다.

문제의 조건: 절대오차 또는 상대오차가 10-9 이하이면 정답이다.

해석: 10-8까지는 반드시 정답과 일치해야 한다. / 소수점 이하 9자리까지는 값을 출력해줘야한다.

위의 결과값은 0.333333000000과 같기 때문에 위의 코드를 소수점 9자리까지는 출력해야한다.

#include<stdio.h>

int main(){
    
    int A,B;
    scanf("%d %d",&A,&B);
    printf("%lf",(double)A/B);

    
    return 0;
}

%lf 에 0.9를 추가해주면 0.333333333로 정답