C++ 백준 1008번 A/B
1008번
코딩테스트 실천 1일차부터 나눗셈 문제에 부딪혔다.
어디서부터 막혔는고 하니...
이 문제의 key는 ...
소수점을 9자리수 이상 받을 수 있는 데이터타입 지정과
소수점 고정인 것 같다.
우선 A와 B를 정수형으로 입력을 받으면 / 와 % 연산만으로 절대 원하는 값을 얻을 수 없다.
해결책은
- A와 B를 int형으로 입력받고 형변환 시켜주기
int main()
{
int a, b;
cin >> a >> b;
double a1 = static_cast<double>(a);
double b1 = static_cast<double>(b);
return 0;
}
c++ 타입변환 연산자 static_cast<데이터타입>(변수)
를 사용
2. A와 B를 double형으로 입력받기
int main()
{
double a, b;
cin >> a >> b;
return 0;
}
문제에서는 정수형으로 입력받으라고 했지만 a, b를 그냥 double 형으로 선언해줘도 되는 것 같다.
그럼 왜 float이 아닌 double형인가?!
문제에서 상대오차가 10^9 이하여야 한다고 했는데,
이는 즉 소수점 이하 9자리까지는 값을 출력해줘야 오차가 허용범위 안에 들어오기 때문이다.
float과 double은 둘 다 실수형 데이터타입이지만, 정밀도에 차이가 있다.
float은 소수점 이하 6자리까지, double은 소수점 이하 15자리까지이기 때문에
이 문제에서는 double 형을 사용해야한다.
그리고 바로 나눗셈 연산자를 이용해 풀면
int main()
{
double a, b;
cin >> a >> b;
cout << a / b << endl;
return 0;
}
또 오답입니다^^..
double 데이터타입이 소수점 이하 15자리까지 나타낸다고 해도 출력은 그 이하로 되기 때문이죠.
따라서 소수점 고정이 필요합니다!
cout << fixed;
cout.precision(9);
cout.precision(숫자)
는 유효숫자 표기 명령어다.
즉, 소수점과 상관 없이 전체 자리 숫자를 고정하는 명령어이고
cout<<fixed;
는 소수점 아래부터 유효숫자를 세겠다라는 명령어입니다.
따라서
#include <iostream>
using namespace std;
int main()
{
double a, b;
cin >> a >> b;
cout << fixed;
cout.precision(9);
cout << a / b << endl;
return 0;
}
요로코롬 해주면 정답!!!
Author And Source
이 문제에 관하여(C++ 백준 1008번 A/B), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ko0930/백준-1008번-AB저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)