문제
두 정수 A, B가 주어질 때, A/B를 소수점 아래 1000자리 이상까지 정확하게 출력하라.
입력
두 정수 A, B가 주어진다.
출력
A/B를 소수점 아래 1000자리 이상까지 출력한다.
예제
| 입력 | 출력 |
|---|---|
1 3 | 0.333... |
풀이
긴 나눗셈(long division)을 반복하여 소수점 이하 자릿수를 구한다.
- 정수 부분
A/B를 출력하고 소수점을 찍는다 - 나머지
A%B에 10을 곱한다 - 다시 B로 나눈 몫을 출력하고 나머지를 갱신한다
- 1001회 반복한다
핵심 아이디어: 수기 나눗셈과 동일한 방식으로, 나머지에 10을 곱해 다음 소수점 자릿수를 구한다.
코드
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int A, B;
cin >> A >> B;
cout << int(A / B) << ".";
A = A % B;
for (int i = 0; i <= 1000; i++)
{
A *= 10;
cout << A / B;
A = A - (A / B) * B;
}
}복잡도
- 시간: O(D) (D: 출력할 소수점 자릿수, 약 1001)
- 공간: O(1)