1000!执行100次耗时515毫秒,这是我这破电脑在反复优化后能达到的最佳效果了,在我原来ACM能通过的代码基础上做了三处优化:
1,原代码追求结果数据顺序存放,所以每计算一次做了一次左移,现在按照计算顺序存放,倒序显示,省略了左移操作
2,楼主只要求做1000的阶乘,而unsigned int 能完全有效表示到9位数,因此我用低6位数表示有效位,高4位数表示进位,扫描次数减少20多万次,但这样不能计算10000的阶乘,原代码为能计算10000的阶乘,是用低5位表示有效数,高5位表示进位的。
3,取进位需要做除法、取余数运算,据说这也比较耗时,因此用了比较操作,只有乘积大于999999时才取进位,减少做除法运算209万次。
也就这样了,待会准备使用INT_64的数据试试,INT_64可以有效表示19位十进制数,我可以用14位表示有效位,这样总循环次数只有1000*2567/14=183358次即可,应该会大大提速的。估计@lin5161678大神和我算法差不多,他之所以快,应该是电脑好。我上学时家里买的是惠普I5的学生机,大三时丢了,又不敢和家里说,只好省吃俭用花500淘的一个08年的二手惠普,也就是能做些日常应用,多开几个网页就卡半天
图片附件: 游客没有浏览图片的权限,请
登录 或
注册