문제링크) http://codeup.kr/problem.php?id=2606


해결방법)

분자와 분모가 주어지는데 실제 나누기를 해보면 소수점 이하부분만 출력하기위한 규칙이 보여진다.


처음에는 단순하게 생각할수있는 것이 실제 나눠봐서 정수부분을 빼고 *100억을해서 출력해서 정답이었지만,


모범답안은 그렇지 않았다.


항상 분자를 분모로 나눈 나머지 *10 에서 분모를 나눈 몫이 소수점 이하 부분의 값이었다.

이를 10번만 반복하면 소수점 이하 10번쨰자리까지 구할 수 있게 된다.


소스코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//첫번째 답안
#include<iostream>
using namespace std;
unsigned long long ten;
int main()
{
    double num;
    int a, b,c;
    cin >> a >> b;
    num = (double)a / b;
    c = a / b;
    ten = 10000000000;
    num = (num - c) * ten;
    printf("%010.lf", num-0.5); // 소수점 첫번째 자리 -0.5해서 버림을 한다.
}
 
//모범답안
#include<iostream>
using namespace std;
int main()
{
    int a, b;
    scanf("%d %d"&a, &b);
    if (a / b > 0) a = a % b;
    for (int i = 0; i < 10; i++)
    {
        a = a * 10;
        printf("%d", a / b);
        a = a % b;
    }
}
cs



반응형

'PS > 코드업' 카테고리의 다른 글

3704번 계단 오르기 2  (0) 2019.03.31
1920번 2진수 변환 (재귀함수)  (0) 2019.03.16
3733번 우박수 길이 - large  (0) 2019.01.27
재귀함수 1부터 n까지 합 구하기  (0) 2018.11.18
코드업-캔디팡 문제  (0) 2018.09.23

+ Recent posts