作者cutecpu (可爱中央处理器)
看板C_and_CPP
标题Re: [问题] 下列程式能印出圆周率达800位,将各for …
时间Tue Apr 7 14:19:26 2009
long a=10000, b, c=2800, d, e, f[2801], g;
main() {
while( b-c )
f[b++] =a/5;
while(d = 0 , g = c*2){
b = c;
while(d += f[b]*a, f[b] = d%--g, d /= g--, --b) d*=b;
c -= 14;
printf("%.4d", e+d/a);
e = d%a;
}
}
※ 引述《fm461020 (猪)》之铭言:
: 这是老师上课出的作业,
: 下列程式能印出圆周率达800位,将各for loops改成while loops:
: 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); }
: 看不懂写法,改成while也没成功跑出来,请问有人会吗?
: 此程式跑出来的结果如下
: 31415926535897932384626433832795028841971693993751058209749445923078164062862089
: 98628034825342117067982148086513282306647093844609550582231725359408128481117450
: 28410270193852110555964462294895493038196442881097566593344612847564823378678316
: 52712019091456485669234603486104543266482133936072602491412737245870066063155881
: 74881520920962829254091715364367892590360011330530548820466521384146951941511609
: 43305727036575959195309218611738193261179310511854807446237996274956735188575272
: 48912279381830119491298336733624406566430860213949463952247371907021798609437027
: 70539217176293176752384674818467669405132000568127145263560827785771342757789609
: 17363717872146844090122495343014654958537105079227968925892354201995611212902196
: 08640344181598136297747713099605187072113499999983729780499510597317328160963185
: 请按任意键继续 . . .
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.4.112
1F:推 fm461020:感谢你的解答^_^,我也知道我哪里写错了 04/07 14:28
2F:推 VictorTom:( ′▽`)-o因囡囝囚 04/07 14:35
3F:→ fm461020:解开谜底,好开心^_^,不过为什麽可以印出圆周率? 04/07 14:38
4F:推 VictorTom:小弟比较好奇为什麽b不用给初值....@_@" 04/07 14:49
5F:→ cutecpu:因为它放在 global 初始值为 0 04/07 15:00
7F:→ fm461020:感谢楼上给的解答^_^ 04/07 15:18
8F:推 VictorTom:谢谢 cutecpu大:) ( ′▽`)-o因囡囝囚 04/07 18:01