| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2352 人关注过本帖
标题:[讨论]在csdn上发的“雨中飞燕计算1000!”程序解释,请大家一起讨论一下
只看楼主 加入收藏
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
我还没在CSDN上发帖子,要发也只可能是别人发
2007-10-02 15:54
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
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
CSDN的网页很难打开。。。谁有代理借一个来用用。。。
2007-10-02 17:51
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 

首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员


CSDNCSDN社区C/C++C语言回复 我要提问 管理帖子 帖子加分 页面风格切换标准风格老版本论坛 看不懂的“雨中飞燕”的代码,请大家帮我仔细分析一下。

yangzhks
XC
等 级:
发表于:2007-10-02 12:35:21 楼主
//看不懂下面代码部分,请各位帮我解释分析一下好吗
//计算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;
}


问题点数:20 回复次数:4 显示所有回复显示星级回复显示楼主回复

A_B_C_ABC
黄瓜@YouCanDoIt
等 级:
发表于:2007-10-02 13:07:101楼 得分:0
代码的可读性很差.
基本原理就是用一个数组S表示大数相乘的结果.数组中每个元素表示的数最大9999.
比如34 5678 9876 5432这个大数可以把5432放在S[0]中,9876放在S[1]中,5678放在S[2]中,34放在S[3]中.



Turntogo
星光伴月
等 级:
发表于:2007-10-02 13:17:582楼 得分: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)执行的方法与上一个类似.
以上仅仅是语法上的解释.相信你弄懂了语法,再考查一下它的算法,就会容易一些了.




conectMouse
风雨破老鼠
等 级:
发表于:2007-10-02 13:25:023楼 得分:0
真是没看明白啊.遇到三目就晕菜,呵呵



Oversense
步步文
等 级:
发表于:2007-10-02 17:29:294楼 得分:0
雨中飞燕...

很强大


将帖子提前 加入我的收藏夹 推荐给好友 我要提问 管理帖子 帖子加分


--------------------------------------------------------------------------------
网站简介-广告服务-网站地图-帮助-联系方式-诚聘英才-English- 问题报告
世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
--------------------------------------------------------------------------------

2007-10-02 17:51
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
这个段代码,确实~~~~,很强大,看了好久,以前看过,不过没参悟过来。。。

偶学编程,也许本身就是一个错。。。
2007-10-02 18:35
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 
看看,楼上很喜欢和雨燕凑和

You have lots more to work on! Never give up!c language!
2007-10-02 18:39
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
我也是……
2007-10-02 18:52
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
有人正确拆出来了,呵呵
2007-10-04 03:14
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 

这个程序真是你写的吗?


羊肉串 葡萄干 哈密瓜!!
2007-10-04 03:29
快速回复:[讨论]在csdn上发的“雨中飞燕计算1000!”程序解释,请大家一起讨论一 ...
数据加载中...
 
   



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

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