| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 477 人关注过本帖
标题:请高手指点一道迭代的题目!
只看楼主 加入收藏
mzx19871205
Rank: 2
等 级:论坛游民
帖 子:12
专家分:23
注 册:2010-4-2
收藏
 问题点数:0 回复次数:3 
请高手指点一道迭代的题目!
计算π的近似值,π的计算公式为:π=2*(2^2/1*3)*(4^2/3*5)*……*(2n*2n)/((2n-1)*(2n+1))
要求:精度为0.000001,并输出n的大小。要避免数据的溢出。
这道题没调出来,希望大家帮帮忙,谢谢!
搜索更多相关主题的帖子: 计算 数据 
2010-04-12 14:47
xiaoxinwan
Rank: 2
等 级:论坛游民
帖 子:52
专家分:91
注 册:2010-4-6
收藏
得分:0 
#include<stdio.h>
void main(void)
{
   double PI,SUM,fenzi,fenmu;     
   long unsigned int i,n;
   SUM=1.0;
   printf("N=");           
   scanf("%ld",&n);
   for(i=1;i<=n;i++)
   {
      fenzi=4*i*i;                 //计算分子
      fenmu=(2*i-1)*(2*i+1);          //计算分母
      SUM=SUM*(fenzi/fenmu);      
   }
   PI=2*SUM;                            //计算PI;
   printf("\nN=%ld\n",n);
   printf("PI=%lf",PI);
   getch();

}

一个疑问,我已近设为长整形了。但是输入大于10000时,会出错。我不知道什么意思。我用的是WIN-TC编译器。
2010-04-12 16:20
mzx19871205
Rank: 2
等 级:论坛游民
帖 子:12
专家分:23
注 册:2010-4-2
收藏
得分:0 
回复 2楼 xiaoxinwan
你那麽计算容易产生溢出,应该将其分解为2*i/2*i-1和2*i/2*i+1,按照这个要求再做做。

[ 本帖最后由 mzx19871205 于 2010-4-13 09:17 编辑 ]
2010-04-13 09:08
xiaoxinwan
Rank: 2
等 级:论坛游民
帖 子:52
专家分:91
注 册:2010-4-6
收藏
得分:0 
#include<stdio.h>
void main(void)
{
   double PI,SUM,fenzi,fenmu,i;
   long n;
   SUM=1.0;
   printf("N=");           
   scanf("%ld",&n);
   for(i=1;i<=n;i++)
   {
      fenzi=(2*i)/(2*i-1);
      fenmu=(2*i)/(2*i+1);
      SUM=SUM*fenzi*fenmu;
   }
   PI=2*SUM;
   printf("\nN=%ld\n",n);
   printf("PI=%lf",PI);
   getch();

}修改后,果然可以满足要求。谢谢楼上。我对数据的宽度有了更深的理解。
2010-04-13 10:46
快速回复:请高手指点一道迭代的题目!
数据加载中...
 
   



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

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