>>177
long floor10(long d)
{
    static const int dtbl[] = {0, 6, 2, 8, 4, 0, 6, 2, 8, 4, 0, 6, 2, 8, 4, 0};
    int lastd = (d & 0xF);
    long val;
    if (lastd >= 10)
        lastd -= 10;
    for (val=(d>>4); val; val>>=4) {
        if ((lastd += dtbl[val & 0xF]) >= 10)
            lastd -= 10;
    }
    return d - lastd;
}