设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 571|回复: 9
打印 上一主题 下一主题

如何求 500!

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 00:13:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int getN();
int getBitNum(int n);
char *init(int size);
void calc(char *a,int n);
void display(char *a,int size);
/*-------------------------------*/
void main(void)
{
int n=getN();
int size=getBitNum(n);
char *pa=init(size);
calc(pa,n);
display(pa,size);
delete []pa;
}
/*-------------------------------*/
int getN()
{
int n;
printf("请输入n!中的n:");
cin>>n;
while(n<0)
{
printf("输入有错误,请重新输入:");
cin>>n;
}
if(n==0)
exit(1);
return n;
}
/*-------------------------------*/
int getBitNum(int n)
{
double sum=1.0;
int i=1;
for(;i<=n;i++)
sum+=log10(i);
return (int)sum;
}
/*-------------------------------*/
char *init(int size)
{
char *pa=new char[size];
if(!pa)
{
printf("too large factor of %d\n",size);
exit(1);
}
pa[0]=1;
int i=1;
for(;i<size;i++)
pa[i]=0;
return pa;
}
/*-------------------------------*/
void calc(char*a,int n)
{
double bitcount=1;
int begin=0;
int i=2;
for(;i<=n;i++)
{
long and=0;
bitcount+=log10(i);
if(a[begin]==0)
begin++;
int j=begin;
for(;j<(int)bitcount;j++)
{
and+=i*a[j];
a[j]=char(and%10);
and/=10;
}
}
}
/*-------------------------------*/
void display(char*a,int size)
{
int bit=0;
int i=size-1;
for(;i>=0;i--)
{
if(bit%68==0)
cout<<"第"<<setw(3)<<(bit/50+1)<<"个68位:";
cout<<(int)a[i];
bit++;
}
cout<<endl;
}
/*-------------------------------*/
2#
发表于 2009-11-4 00:13:28 | 只看该作者
500!这个数很大.值得思考一下.
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-4 00:13:31 | 只看该作者
hehe
那1000!呢
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-4 00:13:32 | 只看该作者
呵呵,其实100!也可以的,只是你要等一会运算结果才能出来的,要有耐心哦!
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-4 00:13:33 | 只看该作者
这个问题很好
500!已经 溢出了, 不能用int ,或double 的

应该 自己写个数组 arry[100]进行 存储
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-4 00:13:34 | 只看该作者
500的阶乘有1135位
运用高精度计算,再大数字的阶乘也可以算出来,不过效率就是主要问题了
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-4 00:13:35 | 只看该作者
以下是引用flylee在2005-12-26 17:16:00的发言:
500的阶乘有1135位
运用高精度计算,再大数字的阶乘也可以算出来,不过效率就是主要问题了
呵呵,上面的兄弟说的对啊,当你输入32767后需要等6,7分钟结果才能出来。数据太大cpu需要时间的!在这一点上我没有深加思索啊!请大家原谅!
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-4 00:13:37 | 只看该作者
han !
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-4 00:13:38 | 只看该作者
有实际意义么?
回复 支持 反对

使用道具 举报

10#
发表于 2009-11-4 00:13:41 | 只看该作者
有!教你如何用数组处理大数据!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 15:06 , Processed in 0.089931 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表