콘솔창 & 윈도우창/코딩 테스트

백준 6463 팩트 C++

게임 개발 2024. 5. 29. 11:46

 

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

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stack>
#include <iomanip>
#include <cmath>

using namespace std;


int lastNonZeroDigitOfFactorial(int n) {
    int result = 1;
    int two_count = 0, five_count = 0;

    for (int i = 1; i <= n; ++i) {
        int num = i;

        while (num % 2 == 0) {
            ++two_count;
            num /= 2;
        }
        while (num % 5 == 0) {
            ++five_count;
            num /= 5;
        }

        result *= num;
        result %= 10;
    }

    for (int i = 0; i < two_count - five_count; i++) {
        result *= 2;
        result %= 10;
    }

    return result;
}

int main()
{

	int num;


    while (cin >> num || !cin.eof()) {
        int lastNonZeroDigit = lastNonZeroDigitOfFactorial(num);

        
        cout << setw(5) << num;

        cout << " -> ";

        cout << lastNonZeroDigit << endl;
        
    }
	return 0;
}