找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 576|回复: 9

如何求 500!

[复制链接]
发表于 2009-11-4 00:13:27 | 显示全部楼层 |阅读模式 IP:江苏扬州
#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:28 | 显示全部楼层 IP:江苏扬州
500!这个数很大.值得思考一下.
回复

使用道具 举报

发表于 2009-11-4 00:13:31 | 显示全部楼层 IP:江苏扬州
hehe
那1000!呢
回复

使用道具 举报

发表于 2009-11-4 00:13:32 | 显示全部楼层 IP:江苏扬州
呵呵,其实100!也可以的,只是你要等一会运算结果才能出来的,要有耐心哦!
回复

使用道具 举报

发表于 2009-11-4 00:13:33 | 显示全部楼层 IP:江苏扬州
这个问题很好
500!已经 溢出了, 不能用int ,或double 的

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

使用道具 举报

发表于 2009-11-4 00:13:34 | 显示全部楼层 IP:江苏扬州
500的阶乘有1135位
运用高精度计算,再大数字的阶乘也可以算出来,不过效率就是主要问题了
回复

使用道具 举报

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

使用道具 举报

发表于 2009-11-4 00:13:37 | 显示全部楼层 IP:江苏扬州
han !
回复

使用道具 举报

发表于 2009-11-4 00:13:38 | 显示全部楼层 IP:江苏扬州
有实际意义么?
回复

使用道具 举报

发表于 2009-11-4 00:13:41 | 显示全部楼层 IP:江苏扬州
有!教你如何用数组处理大数据!
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 19:42 , Processed in 0.203643 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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