반응형
<코드>
#include<iostream>
#include<algorithm>
using namespace std;
long long n, ans;
int main()
{
cin >> n;
ans = 1;
for (int i = 1; i <= n; i++)
{
ans *= i;
ans %= 10000000; // 1천만
while (ans % 10 == 0)
ans /= 10;
}
cout << ans % 10 << '\n';
}
풀이 방법
팩토리얼의 경우 20!만 되도 수가 급격하게 커지기때문에 답을 구할 변수 ans의 크기를 10,000,000으로 제한해서 오버플로우가 발생하지않게 하였고 while문으로 오른쪽의 0들을 제거해주어 답을 출력하였다.
처음에는 dp로
dp[i] = (dp[i-1]*i)%10
로 하여 끝자리수들만 기억해서 곱한뒤 그 수의 1의 자리수를 저장하는 식의 논리를 사용하였지만,,,,
10으로 나눈 나머지수로는 앞에 어떠한 수가 있는지에 대한 모든 정보를 나타낼 수 없기때문에 그러한 논리는 답을 구할 수 없다.
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C/C++] 백준 17946번 - 피자는 나눌 수록 커지잖아요 (0) | 2021.01.17 |
---|---|
[C/C++] 백준 7489번 - 팩토리얼 (0) | 2021.01.17 |
[C/C++] 백준 2810번 - 컵홀더 (0) | 2021.01.16 |
[Python] 백준 14928번 - 큰 수 (BIG) (0) | 2021.01.15 |
[백준] N과 M 시리즈 (백트래킹 문제) (0) | 2021.01.15 |