回复 87楼 童生
既然你已经承认没有九版主速度快,那么可以认为此挑战贴正式结贴,算不算别人挑战你成功了呢?那我就公布我汇合的各求大数阶乘的代码及各算法速度比较结果(其中已经改进16进制大数10进制显示算法,应该是最优算法了,计算结果显示前面约70位数,其中计算1000至4000的阶乘按题主要求计算了100次),各位需要就拿去吧。
先总结下比较结果:本代码在vs2010下编译通过,测试机系统winxp,硬件环境为Intel(R) Core(TM)2 Quad CPU Q6600 2.4GHz,内存4G。
总体来说,64位16进制计算速度最快,计算阶乘数越大优势越明显,但16进制数显示速度慢,因此综合效率我觉得还是100000进制效率较高。九版主代码略优于我的32位16进制和16位16进制,在本机比64位16进制计算慢3倍,64位可计算10万以上的阶乘,其他的只能计算65536以下的数的阶乘。
先上比较结果:
输入要计算的阶乘数:
1000!=402387260077093773543702433923003985719374864210714632543
64位16进制计算1000!耗时110ms,使用了267个int,显示耗时15ms
1000!=402387260077093773543702433923003985719374864210714632543
64位16p进制计算1000!耗时125ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
32位16进制计算1000!耗时188ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
16位16进制计算1000!耗时187ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
九版主计算1000!耗时141ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
十亿进制计算1000!耗时547ms,使用了286个int,显示耗时0ms
1000!=40238726007709377354370243392300398571937486421071463254379991042993
十万进制计算1000!耗时344ms,使用了514个int,显示耗时0ms
输入要计算的阶乘数:
4000!=18288019515140650133147431755739190442173777107304392197
64位16进制计算4000!耗时2750ms,使用了1316个int,显示耗时31ms
4000!=18288019515140650133147431755739190442173777107304392197
64位16p进制计算4000!耗时2703ms,使用了1316个int,显示耗时63ms
4000!=18288019515140650133147431755739190442173777107304392197
32位16进制计算4000!耗时4187ms,使用了1316个int,显示耗时62ms
4000!=18288019515140650133147431755739190442173777107304392197
16位16进制计算4000!耗时4141ms,使用了1316个int,显示耗时47ms
4000!=18288019515140650133147431755739190442173777107304392197
九版主计算4000!耗时3094ms,使用了1316个int,显示耗时78ms
4000!=18288019515140650133147431755739190442173777107304392197
十亿进制计算4000!耗时12375ms,使用了1409个int,显示耗时0ms
4000!=182880195151406501331474317557391904421737771073043921970645269542089
十万进制计算4000!耗时8203ms,使用了2535个int,显示耗时0ms
输入要计算的阶乘数:
10000!=28462596809170545189064132121198688901480514017027992307
64位16进制计算10000!耗时203ms,使用了3702个int,显示耗时360ms
10000!=28462596809170545189064132121198688901480514017027992307
64位16p进制计算10000!耗时187ms,使用了3702个int,显示耗时391ms
10000!=28462596809170545189064132121198688901480514017027992307
32位16进制计算10000!耗时672ms,使用了3702个int,显示耗时375ms
10000!=28462596809170545189064132121198688901480514017027992307
16位16进制计算10000!耗时656ms,使用了3702个int,显示耗时344ms
10000!=28462596809170545189064132121198688901480514017027992307
九版主计算10000!耗时594ms,使用了3702个int,显示耗时375ms
10000!=28462596809170545189064132121198688901480514017027992307
十亿进制计算10000!耗时890ms,使用了3963个int,显示耗时0ms
10000!=2846259680917054518906413212119868890148051401702799230794179994274411
十万进制计算10000!耗时610ms,使用了7132个int,显示耗时0ms
输入要计算的阶乘数:
40000!=2091692422212132363320455256764327026488373544387534341830741
64位16进制计算40000!耗时3219ms,使用了17307个int,显示耗时7484ms
40000!=2091692422212132363320455256764327026488373544387534341830741
64位16p进制计算40000!耗时3406ms,使用了17307个int,显示耗时8266ms
40000!=2091692422212132363320455256764327026488373544387534341830741
32位16进制计算40000!耗时13765ms,使用了17307个int,显示耗时8218ms
40000!=2091692422212132363320455256764327026488373544387534341830741
16位16进制计算40000!耗时13907ms,使用了17307个int,显示耗时8360ms
40000!=2091692422212132363320455256764327026488373544387534341830741
九版主计算40000!耗时12203ms,使用了17307个int,显示耗时8188ms
40000!=2091692422212132363320455256764327026488373544387534341830741
十亿进制计算40000!耗时16344ms,使用了18524个int,显示耗时0ms
40000!=209169242221213236332045525676432702648837354438753434183074196798211
十万进制计算40000!耗时10281ms,使用了33343个int,显示耗时0ms
以下内容是在我二手笔记本上未做编译优化的测试结果:
编译环境:VC++ 6.0
操作系统:WinXP
CPU:Dual T2370 1.73GHz
内存:2G
显卡:集成
测试总结:64位16进制计算速度始终领先,九版主速度中等
输入要计算的阶乘数:1000!=402387260077093773543702433923003985719374864210714632543
64位16进制计算1000!耗时188ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
64位16p进制计算1000!耗时250ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
32位16进制计算1000!耗时281ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
16位16进制计算1000!耗时656ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
九版主计算1000!耗时203ms,使用了267个int,显示耗时0ms
1000!=402387260077093773543702433923003985719374864210714632543
十亿进制计算1000!耗时1063ms,使用了286个int,显示耗时0ms
1000!=40238726007709377354370243392300398571937486421071463254379991042993
十万进制计算1000!耗时578ms,使用了514个int,显示耗时0ms
输入要计算的阶乘数:4000!=18288019515140650133147431755739190442173777107304392197
64位16进制计算4000!耗时4188ms,使用了1316个int,显示耗时78ms
4000!=18288019515140650133147431755739190442173777107304392197
64位16p进制计算4000!耗时4890ms,使用了1316个int,显示耗时94ms
4000!=18288019515140650133147431755739190442173777107304392197
32位16进制计算4000!耗时10797ms,使用了1316个int,显示耗时219ms
4000!=18288019515140650133147431755739190442173777107304392197
16位16进制计算4000!耗时14297ms,使用了1316个int,显示耗时94ms
4000!=18288019515140650133147431755739190442173777107304392197
九版主计算4000!耗时5594ms,使用了1316个int,显示耗时235ms
4000!=18288019515140650133147431755739190442173777107304392197
十亿进制计算4000!耗时38109ms,使用了1409个int,显示耗时0ms
4000!=182880195151406501331474317557391904421737771073043921970645269542089
十万进制计算4000!耗时25438ms,使用了2535个int,显示耗时0ms
输入要计算的阶乘数:10000!=28462596809170545189064132121198688901480514017027992307
64位16进制计算10000!耗时687ms,使用了3702个int,显示耗时1703ms
10000!=28462596809170545189064132121198688901480514017027992307
64位16p进制计算10000!耗时1094ms,使用了3702个int,显示耗时1984ms
10000!=28462596809170545189064132121198688901480514017027992307
32位16进制计算10000!耗时3125ms,使用了3702个int,显示耗时2078ms
10000!=28462596809170545189064132121198688901480514017027992307
16位16进制计算10000!耗时3188ms,使用了3702个int,显示耗时1469ms
10000!=28462596809170545189064132121198688901480514017027992307
九版主计算10000!耗时1031ms,使用了3702个int,显示耗时734ms
10000!=28462596809170545189064132121198688901480514017027992307
十亿进制计算10000!耗时1703ms,使用了3963个int,显示耗时0ms
10000!=2846259680917054518906413212119868890148051401702799230794179994274411
十万进制计算10000!耗时922ms,使用了7132个int,显示耗时0ms
输入要计算的阶乘数:40000!=2091692422212132363320455256764327026488373544387534341830741
64位16进制计算40000!耗时11266ms,使用了17307个int,显示耗时30406ms
40000!=2091692422212132363320455256764327026488373544387534341830741
64位16p进制计算40000!耗时14844ms,使用了17307个int,显示耗时28640ms
40000!=2091692422212132363320455256764327026488373544387534341830741
32位16进制计算40000!耗时53453ms,使用了17307个int,显示耗时36843ms
40000!=2091692422212132363320455256764327026488373544387534341830741
16位16进制计算40000!耗时59375ms,使用了17307个int,显示耗时36734ms
40000!=2091692422212132363320455256764327026488373544387534341830741
九版主计算40000!耗时43079ms,使用了17307个int,显示耗时35047ms
40000!=2091692422212132363320455256764327026488373544387534341830741
十亿进制计算40000!耗时59125ms,使用了18524个int,显示耗时0ms
40000!=209169242221213236332045525676432702648837354438753434183074196798211
十万进制计算40000!耗时41796ms,使用了33343个int,显示耗时0ms
输入要计算的阶乘数:Press any key to continue
[此贴子已经被作者于2018-6-15 06:50编辑过]