| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2352 人关注过本帖
标题:[讨论]在csdn上发的“雨中飞燕计算1000!”程序解释,请大家一起讨论一下
取消只看楼主 加入收藏
yangzhks
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1135
专家分:13
注 册:2006-10-27
结帖率:28.57%
收藏
 问题点数:0 回复次数:5 
[讨论]在csdn上发的“雨中飞燕计算1000!”程序解释,请大家一起讨论一下

//看不懂下面代码部分,请各位帮我解释分析一下好吗
//计算1000!
#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;
}

搜索更多相关主题的帖子: csdn 飞燕 解释 
2007-10-02 13:53
yangzhks
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1135
专家分:13
注 册:2006-10-27
收藏
得分:0 
//分解代码
#include "stdio.h"
int main()
{
int i,j;
int b=0;
int s[1000]={1,1};
for(i=2;i<1000;i++)
{
b=0;
for(j=1;j<=s[0];j++)
{
b += s[j]*i;
s[j]=b%10000;
b /=10000;
}
if(b!=0)
{
s[0]++;
s[s[0]]=b;
}
}
printf("%d",s[s[0]]);
for(;--s[0]>0;)
printf("%04d",s[s[0]]);
return 0;
}
2007-10-02 13:54
yangzhks
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1135
专家分:13
注 册:2006-10-27
收藏
得分:0 
忘了,在那个论坛有一部分解释
雨中飞燕的C语言功底相当深厚!
在一个for语句中的条件表达式和改变条件的运算中作了大量的运算,但是代码却只有一行,虽然这样的代码非常难以理解,但是效率却是非常高的.
for语句的括号里应该是三部分,分别用分号隔开:
第一部分为初始化,因为在main函数之外就做了,所以这里省略了;
第二部分是一个条件表达式 a <= *s ¦ ¦ (++t <= n ? (b = 0 , a =1) : 0) ,只要这个表达式为真,就不会退出循环;
这是一个或运算的条件表达式, *s 是取 s数组中的第一个数据,如果a <=它,条件为真,若为假,则继续看一下条件是否为真,下一个条件是
(++t <= n ?(b=0,a=1):0)
它是一个三元运算符(C/C++中惟一一个三元运算符)表达式,这个条件首先将t加1,然后与n比较,如果加1之后 t <=n 那么计算表达式(b=0,a=1)的值作为条件,否则就是假(即0),表达式(b=0,a=1)是一个逗号运算符构成的表达式,它将b赋0值,a赋1值,并且返回a的值,也就是1,C语言中1用于逻辑表达式时,表示真值;
第三部分应该是每执行一次循环体内的语句之后,在进行下一次循环之前要运行的,它常用来调整循环变量,供第二部分判断退出循环的条件用的,这里也是一个三元运算符表达式: (*s==a++&&b)?(*s)++:0)执行的方法与上一个类似.
以上仅仅是语法上的解释.相信你弄懂了语法,再考查一下它的算法,就会容易一些了.
2007-10-02 14:30
yangzhks
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1135
专家分:13
注 册:2006-10-27
收藏
得分:0 
基本原理就是用一个数组S表示大数相乘的结果.数组中每个元素表示的数最大9999.
比如34 5678 9876 5432这个大数可以把5432放在S[0]中,9876放在S[1]中,5678放在S[2]中,34放在S[3]中.
2007-10-02 14:38
yangzhks
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1135
专家分:13
注 册:2006-10-27
收藏
得分:0 
我发的啊
2007-10-02 17:31
yangzhks
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1135
专家分:13
注 册:2006-10-27
收藏
得分:0 
2007-10-02 17:33
快速回复:[讨论]在csdn上发的“雨中飞燕计算1000!”程序解释,请大家一起讨论一 ...
数据加载中...
 
   



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

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