如何减少查找数字阶乘的最后一个非零数字的运行时间?

时间:2018-01-24 10:37:26

标签: java c time-complexity factorial

我有一个问题,我必须找到一个数字的阶乘的最后一个非零数字。我对java和C使用了相同的代码,但两者都需要不同的时间。

//this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;

this.component = this.element.hasClass('date') ? this.element.find('.input-group-prepend, .input-group-append, .btn') : false;

我想知道为什么需要不同的时间,我该怎么做才能缩短运行时间?

2 个答案:

答案 0 :(得分:0)

请找到优化版本:

private static final int DIG[] = { 1, 1, 2, 6, 4, 2, 2, 4, 2, 8 };

static int lastDigitDiffZero(long n) {
        if (n < 10)
            return DIG[(int) n];
        int t1 = (int) (n % 10);
        int t2 = lastDigitDiffZero(n / 5) * DIG[t1];
        if (((n / 10) % 10) % 2 == 0) {
            return (6 * t2) % 10;
        } else
            return (4 * t2) % 10;
}

答案 1 :(得分:0)

你能不能:

private static int lastDigitDiffZero(long n)
{
   int temp = (int) n;
   int mod = temp%10;

  return (mod == 0 ? lastDigitDiffZero(temp/10) : mod);
}