一道难题求思路
这个题是这样的,对于一个给定的数n,输出这个数n的阶乘的前A位和后B位,看上去非常简单,但是关键是这个n的范围是10的8次方的上限,100的次方的下限,计算机光求个一百的下限就够呛的了(且不能开的出一个足够大的数组保存这么大运算的结果),而且还有时间要求是3000ms,A<=50,B<=100,对于后100位很好求,我已经成功完成了,对于每一次只保留阶乘的后100位乘以i的后100位即可,且当n>300多左右就应该全部为0了,但是对于前50位就...了(不可能只保留前50位了,因为后面的位运算对前50位可能会有影响,而前面的位对最后的位无影响),我想了很久都不得其解,且无法保证不超时。
Sample Input
5 2 1
8 2 2
Sample Output
12 0
40 20
比方说 5!=120 所以A=2,B=1;是输出12 0 ,又8!=40320,所以A=2,B=2;是输出40 20
[解决办法]
前A位直接用stirling公式。后B位就用你说的办法。