找到阶乘最后面的非零位

**问题: **
N的阶乘写作N!,表示小于等于N的所有正整数的乘积。 阶乘会变大得很快,如13!就必须用32位整数类型来存储,到了70!即使用浮点数也存不下了。 你的任务是找到阶乘最后面的非零位。举个例子:

5!=12345=120,所以5!的最靠后的非零位是2。
7!=1234567=5040,所以最靠后的非零位是4。

代码:

#include 
using namespace std;

int main()
{
  long long a,b=1,c;
  cin>>a;
  for(int i=1;i<=a;i++)
  {
      b=b*i;
    while(b%10==0) b=b/10;
  }
  c=b%10;
  cout<

img

我直接用了mod计算,但超时了一大半。题解里说“尾数0是由因子2和5产生的,记录因子2的个数,记录因子5的个数。”,我也不知道什么意思。

请同胞们帮帮忙,教一下我吧!栓Q!

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int count2 = 0, count5 = 0;  //记一下2,5的个数
    int product = 1;         //记一下其他质因子的积的个位数
    for (int i = 2; i <= n; i++) {
        int temp = i;
        for (; temp % 5 == 0; temp /= 5)
            count5++;
        for (; temp % 2 == 0; temp /= 2)
            count2++;
        product = product * temp % 10;
    }
    for (int i = 0; i < count2 - count5; i++)  //5肯定比2少,2*5匹配完后,剩余的2乘回去
        product = product * 2 % 10;
    cout << product << " " << count5 << endl;
}
————————————————
版权声明:本文为CSDN博主「雪的期许」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/winter2121/article/details/119570873