标题:如何求 500!
只看楼主
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
 问题点数:0 回复次数:21 
如何求 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;
}

/*-------------------------------*/

搜索更多相关主题的帖子: void display include 如何 
2005-12-22 19:27
do_while
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-12-24
得分:0 
500!这个数很大.值得思考一下.

2005-12-24 11:06
zinking
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:35
帖 子:916
专家分:0
注 册:2004-12-5
得分:0 
hehe
那1000!呢

http://kongfuziandlife. http://codeanddesign.
2005-12-24 12:36
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 
呵呵,其实100!也可以的,只是你要等一会运算结果才能出来的,要有耐心哦!

♂ 死后定当长眠,生前何须久睡。♀
2005-12-24 19:43
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
得分:0 
这个问题很好
500!已经 溢出了, 不能用int ,或double 的

应该 自己写个数组 arry[100]进行 存储

2005-12-25 08:36
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
得分:0 
500的阶乘有1135位
运用高精度计算,再大数字的阶乘也可以算出来,不过效率就是主要问题了
2005-12-26 17:16
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 
以下是引用flylee在2005-12-26 17:16:00的发言:
500的阶乘有1135位
运用高精度计算,再大数字的阶乘也可以算出来,不过效率就是主要问题了

呵呵,上面的兄弟说的对啊,当你输入32767后需要等6,7分钟结果才能出来。数据太大cpu需要时间的!在这一点上我没有深加思索啊!请大家原谅!


♂ 死后定当长眠,生前何须久睡。♀
2005-12-28 17:16
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 
han !

♂ 死后定当长眠,生前何须久睡。♀
2006-01-04 16:17
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
得分:0 
有实际意义么?

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-01-04 16:56
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 

有!教你如何用数组处理大数据!


♂ 死后定当长眠,生前何须久睡。♀
2006-01-04 17:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-39543-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050004 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved