| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3150 人关注过本帖
标题:到底怎么求阶乘,欢迎讨论
只看楼主 加入收藏
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
燕子能不能简单介绍一下你那个程序的思路阿?

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-30 10:58
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
[bo][un]liyanhong[/un] 在 2008-5-30 00:31 的发言:[/bo]
#include<stdio.h>
#define N 1000    //要计算的N
long s[N]={1,1},n=N,t=2,a=1,b=0;
int main()// 雨中飞燕之作
{
    for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
        s[a]=(b+=s[a]*t)%10000,b/=10000;
    for(printf("%d",s[*s]);--*s>0;)printf("%04d",s[*s]);
    return 0;
}

引用一下8楼的帖子,防他删

[color=white]
2008-05-30 11:44
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
liyanhong同志删帖的可能性还是很小的……
不过li同志,你难道不知道飞燕是很注重版权的么?特别是这么经典的代码……
顺便说一下,原理是二重循环转一重

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-30 11:52
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
楼上你自己去看看8楼变成什么了

[color=white]
2008-05-30 11:58
qq349004853
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-3-27
收藏
得分:0 
在WIN-TC中怎么运行不了啊?
2008-05-30 12:01
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
……………………li真不给我面子……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-30 13:00
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
燕子的代码很巧妙。。。
#include<stdio.h>
#define N 1000    //要计算的N
long s[N]={1,1},n=N,t=2,a=1,b=0;
int main()//
{
    for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
        s[a]=(b+=s[a]*t)%10000,b/=10000;
    for(printf("%d",s[*s]);--*s>0;)printf("%04d",s[*s]);
    return 0;
}
把数组得第0位用来纪录数组长度。。
t是当前的要乘的数。。
b是进位标志。。。
a是数组下标。。。
数组的每位长度为4。。
开始分析:
第一次的时候:a=1,b=0;s[0]=1;
a<=s[0] 真
所以执行下面
s[a]=(b+=s[a]*t)%10000,b/=10000;
可分解为
b=s[a]*t+b;
s[a]=(b)%10000;
b=b/10000;
接着判断
(*s==a++&&b)?(*s)++:0
s[0]==a是真,b=0
a++;
表达式为假,a++,a=2;
再次进入循环
a<=s[0]?2<1是假。。所以做后面
(++t<=n?(b=0,a=1):0)
++t,同时清进位和把数组下标移到第一位从新开始。。。
。。。
直到
(*s==a++&&b)?(*s)++:0为真的时候,数组长度增加一个。。。
整个思想是用数组来模拟大数,然后做乘运算。。

学习需要安静。。海盗要重新来过。。
2008-05-30 13:01
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
TC里运行不了?不会吧?好像没什么兼容性问题啊?最多就是GCC里面给个警告而已…………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-30 13:01
界水乘风
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-05-30 13:04
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
回复16#SW
我自己的面子都保不住了

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-05-30 16:45
快速回复:到底怎么求阶乘,欢迎讨论
数据加载中...
 
   



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

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