| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1295 人关注过本帖
标题:听说10000的阶乘可求,不知怎么解
只看楼主 加入收藏
qinzhenhua
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-12-4
收藏
 问题点数:0 回复次数:9 
听说10000的阶乘可求,不知怎么解
可否帮忙,其实能说说求100的阶乘也可以.
谢谢了
搜索更多相关主题的帖子: 阶乘 
2006-12-04 16:29
高达
Rank: 1
等 级:新手上路
威 望:1
帖 子:261
专家分:0
注 册:2006-10-27
收藏
得分:0 

当N趋于 很大的 时候 可以用数学上的一个公式来。求100000!
不过那公式我忘了!


哎 时间....................
2006-12-04 16:59
mayudong1
Rank: 2
等 级:论坛游民
威 望:1
帖 子:348
专家分:21
注 册:2006-4-18
收藏
得分:0 
100000的阶乘返回值应该是什么类型的呢?

2006-12-04 18:08
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
应该用一个大数组来存储数据,然后进行高精度运算.

高精度算法以前我帖过:http://bbs.bc-cn.net/viewthread.php?tid=103210&extra=&page=10#390076
利用其中的乘法运算

如果不懂可以继续跟帖问

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-04 20:26
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
高精度定义类型的最佳办法是 long s[1000]; 每位存储一个10000进制的数,即这个s变量可以精确存储一个4000位的数!高精度计算其实就是模拟我们的正常计算方法,只是数据的规模太大找不到一个可是使用的正常变量类型,因此用数组模拟.

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-04 20:29
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
我写了一个,求十万内的阶乘,附一万与两万的结果

HLq3dfnE.rar (49.48 KB) 听说10000的阶乘可求,不知怎么解




#include "stdio.h"
long s[500000]={0L}; /*存储数据*/
long h=499999L;
int cheng(long num) {
long t=499999L;
h--;
if(num>=10L) h--;
if(num>=100L) h--;
if(num>=1000L) h--;
if(num>=10000L) h--;
while(t!=h) {
s[t]=s[t]*num;
t--;
} t=499999L;
h=h-5L;
while(t!=h) {
s[t-1]+=s[t]/10;
s[t]=s[t]%10;
t--;
}
h=h+5L;
}
int main(void) {
int i;
FILE *output;
s[499999]=1L;
output=fopen("out.txt","w");
for(i=1;i<=20000L;i++) cheng(i);
for(i=0;i<500000L;i++) {
if(i%500==0) fprintf(output,"\n");
fprintf(output,"%ld",s[i]);
}
return 0;
}

DEV-CPP下运行调试通过

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-08 22:16
liyueyu
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-12-3
收藏
得分:0 
long sum = 1;
for(int i=2;i<10001;i++)
{
sum=sum*i;
}
long的范围具体是多少我记不住 不过肯定超出范围。还有循环1万次估计你的机器跟死机差不多了。
2006-12-09 14:23
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用liyueyu在2006-12-9 14:23:38的发言:
long sum = 1;
for(int i=2;i<10001;i++)
{
sum=sum*i;
}
long的范围具体是多少我记不住 不过肯定超出范围。还有循环1万次估计你的机器跟死机差不多了。

以上我用的是高精度,可以计算的最大的数据精度是 50万位(精确到每一位),用的是long 数组,包括结果都是文件输出.
所以你可以将这个程序改一下,改为高精度.
10000!有3万多位,而long的范围也就是十几位,相差的太大,好象你的程序最多可以算到15!就不错了.


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-09 17:18
财鸟
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2006-11-2
收藏
得分:0 
这个不难呀!!!!!!!!!!!!1
你定义一个指针再。用指针进行逐位运算!!!!!!!!!!!
就象你小学时候做+ — * /
那样!!!!!!!!!!
再用一个数组来存储他每一位的数!!!!!!!!!
用两指针扫描两数(乘数和被乘数)做就好了!!!!!!!!!
不要说是10000
M位也可以做!!!!!!!!!!
只要你空间装的下!!!!!!!!!!!!!!!!!!!!!!11
2006-12-09 20:05
财鸟
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2006-11-2
收藏
得分:0 
这就是数模转换呀!!!!!!!!!
分析程序不要那么死!!!!!!!!!!!!!!!
2006-12-09 20:08
快速回复:听说10000的阶乘可求,不知怎么解
数据加载中...
 
   



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

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