(急急急)怎样求n!最后一位不为0的数(n<=100000000)

来源:百度知道 编辑:UC知道 时间:2024/06/30 16:27:18
时间限制1S
我初学,不会C语言,给PASCAL行吗

很简单,
取每个数的个位数相乘
当为10的整数倍时取最后一位数
如:120取2,32900取9

当为5的整数倍时要好好处理了,
如15只取15/5然后取最后一位(3),然后在把14/2取最后一位(7)

如3150取(3)然后把3148取(4)也就是3150前的任一个数除二再取再后一位,目的是凑成2*5去除后面的0
你看自己能不能写出来,要是写不出来的话,我帮你写

#include <stdio.h>

long Factorial(long nNum)
{
long i=0;
long nResult=1;
long nDiv2Num=0;//除以2的次数
long nDiv5Num=0;//除以5的次数
long nTemp=0;
for(i=1;i<=nNum;i++)
{
nTemp=i;
while(nTemp%10==0)
{//去除最后的0
nTemp/=10;//
}

while(nTemp%5==0)
{//去除5的倍数
nTemp/=5;
nDiv5Num++;
}

while(nTemp%2==0)
{//去除2的倍数
nTemp/=2;
nDiv2Num++;
}
//取最后一位
nTemp=nTemp-int(nTemp/10)*10;
//乘
nResult*=nTemp;
//取最后一位
nResult=nResult-int(nResult/10)*10;
}

printf("nDiv5Num=%d\r\n",nDiv5Num);
printf("nDiv2Num=%d&