/* 此题最重要的一点就是要考虑数据运算的 溢出问题 和 数据类型的表达能力问题, 而楼上的各位均没有充分意识到; 一楼 estellia 的方案看似简洁精巧(运用了递归), 实质上对楼主的题意理解有误, 而且未考虑数据 表达能力, 精度, 以及最重要的数据溢出问题, 根本得不到楼主要求的结果(我亲测过) 楼上的多数没有做过测试, mysolarstar 的运行结果我也看过了, 是 0.000136, 不符楼主要求 楼主的题应是这样的: y=1/(100*100)+1/(200*200)+1/(300*300)+......+1/(m*m) =(1/(1*1)+1/(2*2)+1/(3*3)+...+1/((m/100)*(m/100)))/10000 当 m = 2000 时, m/100 = 20 =( (20! * 20! / (1*1)) + (20! * 20! / (2*2)) + (20! * 20! / (3*3)) +...+(20! * 20! / (20*20)) ) / (20! * 20!) / 10000 我的程序采用通分来计算结果, 并不保证在某种环境上能输出所要求的结果, 仅作算法参考 在 turbo c 下已通过测试(vc 6.0 下不会有问题), 输出结果如下: Please input m: 2000 The result is: 0.000160 */ #include "stdio.h" void main(){ int i, j, m; double sum = 0.0, /* 用于计算通分后所有分子的和 */ common = 1.0, /* 用于计算公分母的平方根 */ temp = 1.0; /* 用于计算通分后各个分子的值 */ printf("Please input m: "); scanf("%d", &m); for(i = 1; i >n; for(i=1;iint main(void){ int m; float y=0; scanf("%d",&m); while (m>=100){y+=1.0/(m*m);m-=100; } printf("%f",y); return 0;}
|