擂台赛:计算n!(阶乘)的精确值,速度最快者2000分送上

liangbch 2003-09-16 08:31:14
要求:
1.可以去internet(中外不限)上找一个程序,也可以自己写一个程序,不要求提供源码,但是必须可以在windows95/98/2000 环境下运行,简言之,大家可以验证其速度。
2。程序至少能够算到 5000!,最好能够算到100000!,因为只有值较大时,才可以比较其算法的优劣。
3。在编程时,可以查阅本论坛所有的帖子提到的算法。
4。可以使用c/c++,pasal/delphi,java,asm,vb等语言编程。
5。时限:暂定为:从即日起限时100天,如果时间不够,可以延期。
6。得分规则:在规定的时间内,如果找到比楼主更快的程序,国内程序:送分1000,国外的程序,送分500;如果写出速度和楼主程序相当者,送分1000,速度快于楼主程序者,送分2000。速度相当是指:速度等于楼主程序的80%-120%,速度对比主要指计算到10000以上的阶乘。
7。如果在给定的时间内仍然没有比楼主更快的算法,但是该算法的速度可以达到楼主程序的一半,送分500。
8。我将陆续公布一些阶乘算法的源码,利于大家编程。
9。我已经编写了一些计算阶乘的程序,现在已经构思出更好的算法,但没有完成程序,今后,我将和大家一块编程。
10。如有完成程序者,可以先和我过去写的一个程序对比一下,看看差距,该程序名为<超级计算器> (1.0完成于2000.10,最后修改于2002.3),可以将四则运算和阶乘等计算到60000位,下载地址:http://www.csdn.net/cnshare/soft/3/3229.shtm
11.声明, 我的程序快只能说明我对此算法下了功夫,并不表明水平有多高,事实上,我得水平很有限。我的口气是狂了些,但主要促进大家编程,希望大家不好为此引发口水战,而应该把精力用在编程上。
12。我目前可用分为13000分,到时我可放多个帖子,将分数送给优胜者。
...全文
1334 227 打赏 收藏 转发到动态 举报
写回复
用AI写文章
227 条回复
切换为时间正序
请发表友善的回复…
发表回复
idau7 2004-03-21
  • 打赏
  • 举报
回复
mark~
要是发一份也可以哦
i.a_7@163.net
woundedsoul 2004-03-21
  • 打赏
  • 举报
回复
关注中。。。。
scoutman 2003-11-11
  • 打赏
  • 举报
回复
请楼
MarsZhangLing 2003-11-02
  • 打赏
  • 举报
回复
最快的是高精度浮点运算库,,,仅保证精度内的准确。
163lzm 2003-10-31
  • 打赏
  • 举报
回复
楼主:
把你的程序发我一份吧,学习学习。
163lzm@163.com
ForgottenRealm 2003-10-31
  • 打赏
  • 举报
回复
也给一份我学习学习!
lipinshengxp.student@sina.com
谢谢
孩皮妞野 2003-10-30
  • 打赏
  • 举报
回复
yaos的那个高精度整数运算库挺不错的。
孩皮妞野 2003-10-30
  • 打赏
  • 举报
回复
有意思。可以看出贴主队这个问题研究了不短的时间。

我的第一感觉也是用2进制计算,转化为10进制输出。以前写一个计算e的程序是,考虑在16位dos上内存比较金贵,用的是这个思路。写出来后发现输出确实非常耗时,我也想知道yaos兄说的nlog(n)的base转化算法。

回过来看一下帖子,基本上就是你的1.1算法.
clane 2003-10-30
  • 打赏
  • 举报
回复
我的程序算50000 30秒,不过是debug编译。c4 2.0g,因为一些程序要常开,没有关过,cpu平时消耗是60%左右的。
MarsZhangLing 2003-10-29
  • 打赏
  • 举报
回复
告诉大家,如果不看原程序的话可以写一个必定胜利的程序(就是速度绝对最快的程序)
就是先吧100000!算出来(这个太容易了,就不用我说了吧)存到个文件里面
然后改编这个文件为C++的程序,让它直接输出就可以了。(文件操作我想大家都会吧)
呵呵,就是复杂度为0,只有输出操作的C++程序。编译通过就可以了。
(这本来是我对付ACM/ICPC的法宝,虽然最后 也没用成功)
flc 2003-10-29
  • 打赏
  • 举报
回复
yun
loujing 2003-10-29
  • 打赏
  • 举报
回复
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;int main()
{
vector<int> v;
cout<<"please input n:";
int n;
int up,i,j;
cin>>n;
v.push_back(1);
for(i=2;i<=n;i++)
{
up=0;
int vsize=v.size();
for(j=0;j<vsize;j++)
{
up+=v[j]*i;
v[j]=up%10;
up/=10;
if(up!=0&&j+1==vsize)
{
for(int temp=0;up/10!=0;temp++)
{
v.push_back(up%10);
up/=10;
}
v.push_back(up);
}
}
}
cout<<n<<"!:";
int newline=0;
for(i=v.size()-1;i>=0;i--,newline++)
{
if(newline%50==0) cout<<endl<<"第"<<setw(3)<<(newline/50+1)<<"个50位:";
cout<<v[i];
}
cout<<endl;
return 0;
}
clh111 2003-10-29
  • 打赏
  • 举报
回复
楼主:
clh-mail@163.com
可否提供下载参考
谢谢!!!
mexcactus 2003-10-28
  • 打赏
  • 举报
回复
1000 172ms
10000 3,234ms
100000 685,093ms
whtech 2003-10-28
  • 打赏
  • 举报
回复
wxy105@163.com
ipgk 2003-10-15
  • 打赏
  • 举报
回复

ipgk@21cn.com
ipgk 2003-10-15
  • 打赏
  • 举报
回复
楼主:
现在CSDN下载不了,能否把源代码和程序发给
liushenling 2003-10-15
  • 打赏
  • 举报
回复
以前记得做过类似的东西,不过时间一常给忘了,没想到,今天面试竟然出了这么一道题!
liangbch 2003-10-14
  • 打赏
  • 举报
回复
to liuyunhuan200(球球)
初级程序的源代码全部公开,中级程序的源代码暂不公开,高级程序尚未完成。
我已将初级程序的源代码发布在本站软件栏目,名为《快速阶乘计算器》,你可以下载它。《快速阶乘计算器》2.0 除了包含初级程序外,还包含了中级程序的执行文件,我已经提交到csdn软件栏目,只是csdn尚未更新。

liuyunhuan200 2003-10-14
  • 打赏
  • 举报
回复
楼主可以把初级和中级以及高级的程序发给小弟吗?让我见识见识高手的大作
加载更多回复(207)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧