Algorithm/Baekjoon

[Baekjoon] C++ 1312번 - 소수 (Silver 5)

유제필 2022. 11. 20. 15:24

1312번: 소수

 

 

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 8432 2518 2252 35.276%

문제

피제수(분자) 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번째 수를 출력한다.

예제 입력 1 복사

25 7 5

예제 출력 1 복사

2

 

정답

#include <iostream>

using namespace std;

int main()
{
    int A, B, N, result;
    
    // A, B, N 입력
    cin >> A >> B >> N;
    
    // N 번째 소숫점 까지 반복
    while(N--) {
      
        // A를 B로 나눠 몫을 구해 1자리 수로 만듦
        A %= B;
    
        // 1 이하일 경우 *10을 해서 소수점 몫만 출력
	// 1 이상일 경우 다음 소수점 자리 출력을 위해 반복
        A *= 10;
    
        // A를 B로 나눈 값, 즉 정답
        result = A / B;
    }
    
    cout << result << endl;
    

    return 0;
}

 

문제 풀이

먼저 출력해야 하는 자리 수 N값 만큼 반복문을 돌린다.

while(N--)

 

먼저 A를 B로 나누고 몫을 구한다.

N번째 리턴하고 마지막 반복에서 몫이 1 이하일 경우 * 10을하여 1이상 값으로 만든 후 최종적으로 몫만 구한다.

 

마지막 몫인 result값만 리턴하면 정답이다.