**问题: **
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<

我直接用了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