코딩테스트/백준

[백준] 1008번 A/B

매과 2021. 3. 7. 04:03

문제

두 정수 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