백준 1008번 : A / B 문제 풀이
입출력과 사칙연산
https://www.acmicpc.net/problem/1008
이번 문제는 생각보다 어려웠던 것 같다
이전 문제들과 비슷하게 사칙연산 기호만 바꿔주면 된다고 생각했는데 그게 아니었다.
아래는 처음 짠 코드이다
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%d", a / b);
return 0;
}
문제를 보면 "실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다. " 라고 나와있다
지금 코드의 출력결과는 실수형이 아닌 정수형으로 뒤의 소수점이 나오지 않는다
C 언어의 실수 자료형 타입은
float, double, long double
대략적으로 오차범위가 적은 순으로 나열하면
long double > double > float 순이다
그래서 두번째로 수정한 코드가 아래 코드이다
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%.10f", a / b);
return 0;
}
%.10f 형식지정자를 사용해서 소수점 뒤의 10자리까지 출력하도록 하지만
a / b 의 결과는 정수형(int)이라 오류가 나게 된다.
a / b 의 자료형을 변환해주어야 값이 정상적으로 출력되게 된다
C언어의 자료형 변환 방법은
printf("%.15f", (double) a / b);
변환하고자 하는 자료형을 ()안에 넣고 변수 왼쪽에 써주면 된다
double 자료형을 가지고 출력을 한다고 하더라도
2번째 예제의 입출력 결과는 소수점 이하 자리의 0이 출력된다
%g 형식지정자를 이용하면 소수점 이하 자리의 0을 출력하지 않을 수 있다.
추가로, %e는 과학적 표기를 위해 이용한다
형식지정자를 더 알고 싶다면 아래 사이트를 참고하면 된다
https://codeforwin.org/c-programming/list-of-all-format-specifiers-in-c-programming
마지막으로 제출한 코드이다
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("%.15g", (double) a / b);
return 0;
}
'Coding > baekjoon' 카테고리의 다른 글
[baekjoon] 10926번 : ??! [C] (0) | 2023.11.12 |
---|---|
[baekjoon] 10869번 : 사칙연산 [C] (0) | 2023.11.12 |
[baekjoon] 10998번 : A x B [C] (0) | 2023.11.11 |
[baekjoon] 1001번 : A - B [C] (0) | 2023.11.11 |
[baekjoon] 1000번 : A + B [C] (0) | 2023.11.10 |