新微赢技术网
标题:
如何求 500!
[打印本页]
作者:
蓝天使者
时间:
2009-11-4 00:13
标题:
如何求 500!
#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;
}
/*-------------------------------*/
作者:
罗米欧
时间:
2009-11-4 00:13
500!这个数很大.值得思考一下.
作者:
梦缘o☆无恒
时间:
2009-11-4 00:13
hehe
那1000!呢
作者:
ξǒひ糀無蒛
时间:
2009-11-4 00:13
呵呵,其实100!也可以的,只是你要等一会运算结果才能出来的,要有耐心哦!
作者:
赌神
时间:
2009-11-4 00:13
这个问题很好
500!已经 溢出了, 不能用int ,或double 的
应该 自己写个数组 arry[100]进行 存储
作者:
大漠
时间:
2009-11-4 00:13
500的阶乘有1135位
运用高精度计算,再大数字的阶乘也可以算出来,不过效率就是主要问题了
作者:
夜流冰
时间:
2009-11-4 00:13
以下是引用flylee在2005-12-26 17:16:00的发言:
500的阶乘有1135位
运用高精度计算,再大数字的阶乘也可以算出来,不过效率就是主要问题了
呵呵,上面的兄弟说的对啊,当你输入32767后需要等6,7分钟结果才能出来。数据太大cpu需要时间的!在这一点上我没有深加思索啊!请大家原谅!
作者:
快乐小猪
时间:
2009-11-4 00:13
han !
作者:
o.筎茈菰箪き
时间:
2009-11-4 00:13
有实际意义么?
作者:
寂寞男孩
时间:
2009-11-4 00:13
有!教你如何用数组处理大数据!
欢迎光临 新微赢技术网 (http://bbs.weiying.cn/)
Powered by Discuz! X3.2