优美的大乔 2022-08-05 11:47 采纳率: 94.7%
浏览 113
已结题

找到阶乘最后面的非零位

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

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

代码:

#include <bits/stdc++.h>
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<<c;
  return 0;
}

img

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

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

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-08-05 12:01
    关注
    #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
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月14日
  • 已采纳回答 8月6日
  • 创建了问题 8月5日

悬赏问题

  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?