728x90
문제
피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다.
입력
첫 번째 줄에 A와 B(1≤A, B≤100,000), N(1≤N≤1,000,000)이 공백을 경계로 주어진다.
출력
A÷B를 했을 때, 소숫점 아래 N번째 수를 출력한다.
- 소숫점 문제라서 단순히 %연산을 썼는데 틀려버렸다.
- 생각해보니까 float/double은 부동소수점이라 아래 자리수가 커질수록 정확도가 낮아짐(1,000,000번째 자리수까지 따지고 있다...double이 지원하던가 애초에?)
- 컴퓨터 연산 대신 손으로 푸는 나눗셈 풀이로 풀어보기로 함
#include <iostream>
using namespace std;
int main() {
// your code goes here
int a, b, n;
int res = 0;
cin >> a >> b >> n;
if( a % b == 0){
cout << 0;
return 0;
}
if( a > b ) a = a % b;
for(int i=0;i<n;i++){
a *= 10;
res = (int)(a / b);
a = a % b;
}
cout << res;
}
만약 나눠 떨어지면(나머지가 0이면) 바로 0을 출력하고,
그렇지 않으면 a의 자리수를 하나 올린 후, 몫을 출력한다. a는 나머지로 갱신한다.
n번째 자리수까지 이를 반복한 후 마지막 연산의 몫이 n번째 자리수 소수가 된다.
728x90