// UVa 568 - Just the Facts #include <iostream> #include <stdio.h> using namespace std; struct triad { int twos, fives, digit; }; int main() { triad f[10001]; f[1].twos = 0; f[1].fives = 0; f[1].digit = 1; for (int i = 2; i <= 10000; i++) { int j = i; int c2 = 0; while (j % 2 == 0) { c2++; j = j / 2; } int c5 = 0; while (j % 5 == 0) { c5++; j = j / 5; } int dig = j % 10; f[i].twos = f[i - 1].twos + c2; f[i].fives = f[i - 1].fives + c5; f[i].digit = (f[i - 1].digit * dig) % 10; int mn = min(f[i].twos, f[i].fives); f[i].twos -= mn; f[i].fives -= mn; } int n; int p2[4] = { 6, 2, 4, 8 }; while (cin >> n) { int dig = f[n].digit; if (f[n].fives) dig *= 5; else if (f[n].twos) dig *= p2[f[n].twos % 4]; printf("%5d -> %d\n", n, dig % 10); } return 0; }
Wednesday, June 10, 2015
UVa 568 - Just the Facts
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment