본문 바로가기

코딩/백준 BOJ

[백준/C언어] 1008번 - A / B

백준 웹사이트 "1008번 - A / B" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

1008번: A/B

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

www.acmicpc.net


소스 코드

#include <stdio.h>

int main(void){
    int A, B;
    scanf("%d %d", &A, &B);

    printf("%.9f\n", (double) A/B);
    return 0;
}

문제 풀이

  두 정수 A, B를 선언하고, 입력받고, 출력하는 과정은 1000번 문제와 동일합니다. Line 5의 &A, &B에 관한 내용은 아래 1000번 문제 풀이를 확인해주세요.

 

[백준/C언어] 1000번 - A + B

백준 웹사이트 "1000번 - A + B" 문제풀이입니다. 언어는 C언어입니다. (제출 언어: C99) 문제 1000번: A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 소스 코.

loding.tistory.com

  이 문제의 경우, 정답률이 높은 다른 문제들에 비해 훨씬 낮은 34.271%(2021.12.19 기준)의 정답률을 보입니다. 이것은 아마 Line 7에서 실수하기 쉬워서일텐데요, 앞의 문제들과 다르게 "%d"를 사용하지 않습니다. printf 구문에서 "%d"는 정수(integer)의 출력을 의미합니다. 따라서 "%d"를 사용하면 A/B의 정수 부분만 출력되어, 1/3의 결과를 0으로 계산합니다. 우리는 정수의 출력이 아닌, 소수의 출력을 원하므로 소수의 출력을 의미하는 "%f"를 사용해야 합니다.

  그러면 "%f"로 하여 Line 7을 아래와 같이 작성하면 어떤 결과가 나올까요?

 

printf("%f\n", A/B);

 

결과는 다음과 같습니다.

 

0.000000

 

  우리가 원하는 0.333333333이라는 답과는 꽤나 차이가 있죠? 두 가지 문제가 있습니다. 첫 번째로는 A, B가 'int'형으로 선언 되어 있어, A/B도 계산된 후 자동으로 'int'형으로 저장된다는 것입니다. 따라서 0.33333.. 이라는 계산 결과를 얻은 후 정수 부분인 0만 저장되어, 이 값을 "%f"로 불러오기에 0.00000..의 값이 나옵니다. A/B가 계산된 후에 이를 정수(int)가 아닌 소수(double)로 저장하도록, A/B 앞에 '(double)'을 추가합니다. 이것이 바로 '자료형 변환 (type casting)'이라는 과정입니다.

  두 번째 문제는 소수점 아래 여섯째 자리까지만 나타난다는 점인데, 소수점 아래 아홉째 자리까지 나타내기 위해 "%f"가 아닌 "%.9f"을 사용합니다.

  이러한 부분들을 고쳐 위의 소스 코드와 같이 수정하면, 아래와 같은 출력이 나타납니다.

 

0.333333333

 

반응형

'코딩 > 백준 BOJ' 카테고리의 다른 글

[백준/C언어] 10430번 - 나머지  (0) 2021.12.20
[백준/C언어] 10869번 - 사칙연산  (0) 2021.12.20
[백준/C언어] 10998번 - A × B  (0) 2021.12.19
[백준/C언어] 1001번 - A - B  (0) 2021.12.19
[백준/C언어] 1000번 - A + B  (0) 2021.12.18