마지막 팩토리얼 수 2553

PublicMinsu·2023년 10월 2일
0
post-custom-banner

문제

접근 방법

0의 경우 곱해도 0이다. 즉 0은 미리 버려도 된다.
0을 제거하고 남은 수 중에 너무 높은 자리는 낮은 자리에 영향을 줄 수 없다고 생각하고 잘라내면 된다.

코드

#include <iostream>
using namespace std;
typedef unsigned long long ull;
int main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    ull ret = 1, N;
    cin >> N;
    for (int i = 2; i <= N; ++i)
    {
        ret *= i;
        while (!(ret % 10))
            ret /= 10;
        ret %= 10000000000000;
    }
    ret %= 10;
    cout << ret;
}

풀이

10으로 나머지 연산한 값으로 해결해 보려 했지만 일의 자리 범위 밖에서의 값이 나중에 곱을 통해 더해지면서 영향을 줄 수 있기에 안되는 것 같다.
16하고 6의 경우 5를 곱하면 80, 30이다
이런 경우가 존재할 수 있기에 충분히 큰 수를 남겨주면서 이어줘야 한다.

profile
연락 : publicminsu@naver.com
post-custom-banner

0개의 댓글