hdu1066 阶乘最后一个非0数

博客主要介绍了如何解决HDU1066问题,即求阶乘的最后一位非零数字。重点强调了在函数中避免使用大内存变量以防止栈溢出,提出了一种通过对比AC代码和自造数据来定位错误的方法,并详细解释了分组计算阶乘尾数的递归策略,包括对5和2的处理以及处理未满组的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你只有非常努力,才能看起来毫不费力。

收获:

1:不要在函数里面(尤其是递归函数里面)定义较大空间的变量,可能会爆栈!!!!可能会出现未知错误!!!

      不要在函数里面(尤其是递归函数里面)定义较大空间的变量,可能会爆栈!!!!可能会出现未知错误!!!

      不要在函数里面(尤其是递归函数里面)定义较大空间的变量,可能会爆栈!!!!可能会出现未知错误!!!

2:一种判断数据哪里方法:(今天忽然想到的,给大家推荐一下,有一定的局限性)

代码不知道哪个数据错了咋办?在网上找一个AC码,和自己的算法整理一下,写到一个程序里,然后用几个循环造数据,比较结果。确实很有用呢。

3:阶乘最后一位的求解:

将整个阶乘的算式1*2*3*....n每10位一段进行分组,也就是1*2*3*..10一组,11*12*13*...20一组,如此分下去得到n/10组,令k=n/10.然后将每组中剔除掉所有因子里面的2个5和2个2,这样再将剩下的所有组相乘即可.当然,分组的目的不在于剔除,而是可以发现在每组中,除去xxxx5和xxx10,剩下的数字相乘再除以4的最后一位都是4,而4的k次方的最后一位可以构成一个周期序列4,6,4,6,4,6........( 比较难理解的地方就是这:其实是2*3*4*1*6*7*8*9的最后一位是6,为什莫会变成4?因为后面是将5和10分别分成了1和5、2和5。两个5就需要两个2来相乘去掉,相当于多乘了4,6就得除上4。)而被剔除的5的倍数将每个都除以5后又得到了一个新的阶乘(n/5)!,你需要做的就是求出这个新阶乘的最后一位并于前面得到的4或6相乘再取最后一位. 当然,还不要忘记因为数量不够,没有凑成一组的最后几个数字.要求最后这几个数字乘积的最后一位就很简单了,最后一位相乘再取最后一位即可.当然,由于分组就是每10个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值