免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: siupan
打印 上一主题 下一主题

[help]超大數求(factorial) [复制链接]

论坛徽章:
0
21 [报告]
发表于 2002-11-06 17:48 |只看该作者

[help]超大數求(factorial)

To syo:
我猜也是这样。关键是能不能由设定的数组的大小,就直接推出n的取值范围;或者知道n来确定要设定的数组的大小。望指教!

论坛徽章:
0
22 [报告]
发表于 2002-11-06 18:27 |只看该作者

[help]超大數求(factorial)

[这个贴子最后由syo在 2002/11/06 06:39pm 编辑]

思路:
声明一个大小为xxx的数组,负责存储每一位的数据,变量digit为计算位数的变量,i,j,r,k为循环中记数的变量.
data(0)存放0的阶乘.
开始时,使第一位为1,位数为1,将每次相乘后的乘积存入数组.
循环处理每个数组中超过10的数字,
若值大于10,则digit++,原来的数除以10,
其商加上后一位的数值后存入后一位的数组中,余数存入原来的数组里.
循环计算结束后,打印出n!=......

论坛徽章:
0
23 [报告]
发表于 2002-11-06 18:38 |只看该作者

[help]超大數求(factorial)

[这个贴子最后由syo在 2002/11/06 11:22pm 编辑]

不知道

论坛徽章:
0
24 [报告]
发表于 2002-11-07 11:04 |只看该作者

[help]超大數求(factorial)

下面引用由syo2002/11/06 05:44pm 发表的内容:
450以后就超过我定的数组1000位了
你可以把第5和第9行的1000加大就行了。
不能这么做,syo你看我的程序,已经这么做了,我们的程序是一样的,可是阶数稍微高一点就出错,就是计算结果是错误的,我怀疑是c自身的原因,求不了太高阶数的阶乘,有谁可以指导一下?是不是这个原因?谢谢

论坛徽章:
0
25 [报告]
发表于 2002-11-07 11:12 |只看该作者

[help]超大數求(factorial)

用malloc动态调整数组digit[]的大小。
先开10k,一旦发现不够就用realloc再加10k……

论坛徽章:
0
26 [报告]
发表于 2002-11-07 11:17 |只看该作者

[help]超大數求(factorial)

[这个贴子最后由michael009在 2002/11/07 11:18am 编辑]

谢谢,我试一下

论坛徽章:
0
27 [报告]
发表于 2002-11-07 14:46 |只看该作者

[help]超大數求(factorial)

[这个贴子最后由syo在 2002/11/07 03:33pm 编辑]

我认为这和语言本身有关,
c语言本身对int的大小就有一个限制
我在vc6.0中调试了以下,发现程序中数组最大可以是258552
超过这个大小就无法算出n!的值
不过,25万位,也该足够用了吧..

论坛徽章:
0
28 [报告]
发表于 2002-11-07 15:32 |只看该作者

[help]超大數求(factorial)

下面引用由michael0092002/11/07 11:04am 发表的内容:
不能这么做,syo你看我的程序,已经这么做了,我们的程序是一样的,可是阶数稍微高一点就出错,就是计算结果是错误的,我怀疑是c自身的原因,求不了太高阶数的阶乘,有谁可以指导一下?是不是这个原因?谢谢
michael009:
我把你的程序复制到vc中调试,编译通过无错误
但是总是在得出结果后,
提示非法操作,然后只好强制关闭
而我自己的程序却没有


我观察了一下你的程序,发现你的程序在22行和26行的
if语句中 Data[Digit]>;10 而不是 Data[Digit]>;=10
所以你的程序从27!就开始出错
真正的
27! = 10888869450418352160768000000,
而你的程序运行后是
27! =  0888869450418352160768000000,
由此导致你以后的所有计算都出错.


你是参考那本C语言数据结构上的原程序吧,
我认为那本书虽然不错,但还是有一些错误的,最好自己写后再调试一下.

但搞不通的就是
我把你的程序的if语句改过来后,运行得出结果后,
虽然答案正确,但仍提示非法操作,
奇怪?!?

论坛徽章:
0
29 [报告]
发表于 2002-11-07 16:10 |只看该作者

[help]超大數求(factorial)

for(r=1&#59;r<Digit+1&#59;r++)改为for(r=j&#59;r<Digit+1&#59;r++)如何?

论坛徽章:
0
30 [报告]
发表于 2002-11-07 16:24 |只看该作者

[help]超大數求(factorial)

我用的bcb,编译、运行都没问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP