[백준] 1008번 A/B
문제
두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.
작성한 코드 c++
#include <iostream>
using namespace std;
int main(){
double a,b;
cin>>a>>b;
cout<<fixed;
cout.precision(15);
cout<<a/b<<endl;
return 0;
}
결과
배운점
0.
처음으로 어마어마하게 틀렸다.
처음엔 입력이 두번이라 반복문을 써야하는 줄 알아서 for문을 사용했지만 틀렸다.
(나중에 for문을 넣어도 지워도 똑같이 정답인 걸 보면 필요 없는 것 같다.)
그래서 직접 c++을 돌리면서 풀었는데 결국 두가지가 문제였다.
- 변수의 타입
- 소수의 정밀도
1. 부동 소수점 자료형 float 와 double => double을 사용해야 했다.
둘다 실수형
정밀도의 차이
float는 소수점 이하 6자리
double은 소수점 이하 15자리
그러나 부동 소수점 숫자를 출력할 때 std::cout의 기본 정밀도는 6이다.
(10/3을 했을 떄 3.33333이 출력된다. 소수점 아래 다섯번째 자리까지
소수점 아래 부분의 출력 범위만 설정하는 게 아니고
실수의 정수부와 소수부를 합친, 전체의 출력 범위를 설정한다.)
즉, 모든 부동 소수점 숫자는 6자리까지만 유의하다고 가정하여 이후는 잘라낸다.
이를 어떻게 해결해야 할까?
3. cout.precision(15);
cout.precision() 함수를 사용하면 cout에서 출력되는 기본 정밀도를 재정의(override)할 수 있다.
cout.precision(15);를 하면 정수부와 소수부를 합친 자리수가 15인 수를 출력한다.
ex)3.33333333333333
4. cout<<fixed;
precision 함수를 소수점 아래 숫자의 출력 범위만 설정하게 쓰려면 fixed를 추가해야 한다.
위 코드를 입력한다면. cout.prcision(15); 의 결과는 소수부만 15자리수로 나오게 된다.
ex) 3.333333333333333
3. double a,b;
한줄에 두가지 변수를 동시에 선언할 수 있다.
4. cin>>a>>b;
한줄로 여러 변수를 차례대로 입력하게 할 수 있다.
5. cout<<a/b<<endl;
출력하는 객체인 cout문에 산술연산자를 써서 계산결과를 출력하는 것이 가능하다.
참고 사이트 : 부동 소수점 숫자 boycoding.tistory.com/152