Click Here to go back to the homepage.

Low Order Zeros Solution:


#include <iostream>
#include <array>
#include <string>
#include <algorithm>
#include <vector>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <tuple>
#include <climits>
#include <functional>
#include <future>
#include <list>
#include <forward_list>
#include <limits>
#include <mutex>
#include <thread>
#include <any>
#include <iterator>
using namespace std;

template <typename T>
void print(T t) {
	for (auto i : t) {
		cout << i << ' ';
	}
	cout << '\n';
}

int last_digit(unsigned long long n) {
	while (n % 10 == 0) {
		n /= 10;
	}
	return n % 10;
}

unsigned long long simplify(unsigned long long n) {
	while (n % 10 == 0) {
		n /= 10;
	}
	return n % 10000;
}

int main()
{
	unsigned long long ans = 1;
	int* all = (int*) malloc(1000001 * sizeof(int));
	all[0] = 1;
	all[1] = 1;
	for (int i = 2; i <= 1e6; i++) {
		ans *= i;
		ans = simplify(ans);
		all[i] = last_digit(ans);
	}
	
	int input;
	while (cin >> input) {
		if (input == 0) {
			break;
		}
		cout << all[input] << '\n';
	}
}