精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>算法集锦--------梦入玄机>>一个求圆周率的怪程序

主题:一个求圆周率的怪程序
发信人: mrcloud()
整理人: wenbobo(2002-12-27 15:50:23), 站内信件
求PI精確值的怪異程式 
pi1.c(487bytes)/pi2.c(552bytes) 
作者:佚名 
前者就是被稱為「外星人程式」的求PI小程式.. 
四行求PI到小數點後八百位..真的不是人寫得出來的.. :Q  
後者寫法也是相當奇怪.. 

--------------------------- 

/*某年Obfuscated C Contest佳作選錄:*/ 

long a=10000,b,c=2800,d,e,f[2801],g; 
main(){for(;b-c;)f[b++]=a/5; 
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) 
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);} 

/*(原程式第一行是int a=10000,b,c....因為在IBM PC 
 上int只有2-byte,所以我改成long以便各platform都 
 能run) 
(本程式連可算出pi值連小數點前共800位) 
(本程式節錄自sci.math FAQ,原作者未詳,我猜是外星人 :)*/ 

运行通过,答案正确  

--------------------------- 

#define _ -F<00||--F-OO--;
long F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_
}

编译通过,但答案不对,为0.267

谁能看得懂啊?


--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.101.16.172]
发信人: gshawk (明波), 信区: C
标  题: Re: 自认为是C高手的请进(并非讽刺)
发信站: 网易虚拟社区 (Fri Aug 13 11:58:31 1999), 站内信件

【 在 mrcloud (阿豪) 的大作中提到: 】
下面是我运行的情况。
在 Unix 下:
//pi.c pi.c
#include <stdio.h>
int a=10000, b, c=2800, d, e, f[2801], g;
main()
{
   for(;b-c;)
      f[b++]=a/5;
   for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
      for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}

Sun# gcc -o pi pi.c
Sun# ./pi
3141592653589793238462643383279502884197169399375105820974944592307816
4062862089
9862803482534211706798214808651328230664709384460955058223172535940812
8481117450
2841027019385211055596446229489549303819644288109756659334461284756482
3378678316
5271201909145648566923460348610454326648213393607260249141273724587006
6063155881
7488152092096282925409171536436789259036001133053054882046652138414695
1941511609
4330572703657595919530921861173819326117931051185480744623799627495673
5188575272
4891227938183011949129833673362440656643086021394946395224737190702179
8609437027
7053921717629317675238467481846766940513200056812714526356082778577134
2757789609
1736371787214684409012249534301465495853710507922796892589235420199561
1212902196
0864034418159813629774771309960518707211349999998372978049951059731732
8160963185



--
┏━━━━━━━━━━━━━━━━━━━━━┓
│         厚地高天, 堪叹古今情不尽 ,      │
│         痴男怨女, 可怜风月债难偿 !      │
┗━━━━━━━━━━━━━━━━━━━━━┛

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.23.10]
发信人: fxw (bare), 信区: C
标  题: Re: 自认为是C高手的请进(并非讽刺)
发信站: 网易虚拟社区 (Fri Aug 13 14:36:12 1999), 站内信件

太高了!
vc下通过!
程序:
#include <windows.h>
#include <stdio.h> 
int a=10000, b, c=2800, d, e, f[2801], g; 
main() 

   for(;b-c;) 
      f[b++]=a/5; 
   for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) 
      for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); 
return 0;
}
结果:
3141592653589793238462643383279502884197169399375105820974944592307816
4062862089
9862803482534211706798214808651328230664709384460955058223172535940812
8481117450
2841027019385211055596446229489549303819644288109756659334461284756482
3378678316
5271201909145648566923460348610454326648213393607260249141273724587006
6063155881
7488152092096282925409171536436789259036001133053054882046652138414695
1941511609
4330572703657595919530921861173819326117931051185480744623799627495673
5188575272
4891227938183011949129833673362440656643086021394946395224737190702179
8609437027
7053921717629317675238467481846766940513200056812714526356082778577134
2757789609
1736371787214684409012249534301465495853710507922796892589235420199561
1212902196
0864034418159813629774771309960518707211349999998372978049951059731732
8160963185








--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.77.38.113]
发信人: girlrong (阿蓉), 信区: C
标  题: Re: 自认为是C高手的请进(并非讽刺)
发信站: 网易虚拟社区 (Sat Aug 14 12:02:04 1999), 站内信件

【 在 mrcloud (阿豪) 的大作中提到: 】
: 求PI精確值的怪異程式 
: pi1.c(487bytes)/pi2.c(552bytes) 
: 作者:佚名 
: 前者就是被稱為「外星人程式」的求PI小程式.. 
:    .......


我把它移植到vc++6.0的win32平台里。不得不加了一点代码。看来这个外星人的
数学水平极好。

void GetPI()
{
int a=10000,b=0,c=2800,d=0,e=0,f[2801],g=0,index=0; 
char str[10000];
for(;b-c;)f[b++]=a/5; 
for(;d=0,g=c*2;c-=14,sprintf(str+index,"%.4d",e+d/a),index=strlen(str)
,e=d%a) 
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
MessageBox(NULL,str,"",MB_OK);


--
各位好!要认识我,请点我的名字。
回复时,别忘了在“将文章寄给原作者一份”里打钩哟!

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.243.50]

[关闭][返回]