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

+ Recent posts