Uknow's Lab.
article thumbnail

https://www.acmicpc.net/problem/7489

 

7489번: 팩토리얼

n!은 정수 n에 대한 팩토리얼 수를 나타내는데, 이는 1부터 n까지의 모든 정수의 곱을 의미한다. 팩토리얼은 굉장히 빨리 커지기 때문에 13!는 대부분의 컴퓨터에서 32비트 정수형을, 70!은 대부분

www.acmicpc.net

 

난이도 : 브론즈 2
태그 : 수학, 임의 정밀도 / 큰 수 연산

 

설명

팩토리얼은 매우 빠른 속도로 커져 순식간에 오버플로우가 발생합니다.

그러나, 그렇다고 해서 BigDecimal을 사용하기엔 메모리와 시간을 초과할 것이 분명합니다.

 

자세히 보니, 0이 아닌 최우측 수를 출력하는 문제이네요.

매 연산마다 최우측 수가 0이 아닐 때 까지 10으로 나눠주면 되겠네요.

 

 

소스코드

fun main() {
    val case = readLine()!!.toInt()

    for (i in 0 until case) {
        val target = readLine()!!.toInt()
        var number = 1
        for (k in 2..target) {
            number *= k
            while (number % 10 == 0) {
                number /= 10
            }
            number %= 100000
        }
        println(number%10)
    }
}

 

후기

순식간에 매우 커지는 팩토리얼의 특성을 고려해야 하는 문제였습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.