A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘永贵 中级黑马   /  2013-6-21 21:15  /  1190 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-6-22 10:03 编辑

下面是我编写的代码,但是运行的时候报错了  请大家帮我看看
   
    public class PI {
        public void main (String args[ ] ) {
             long n=1;
             int pi=2;
             while  (n>10000000) {
                 pi=pi*(2*n)/(2*n-1)*(2*n)/(2*n+1);
                 n++;
             }
             System.out.println ("n="+n) ;
        }
    }               

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
pi=pi*(2*n)/(2*n-1)*(2*n)/(2*n+1);
这里括号什么的少了吧的看不懂是什么
回复 使用道具 举报
我觉得作者目的没有明确,还有就是不细心,多加努力啊:
1.首先,你问问题根本就没说目的,一个程序写出来总有点需求,不然我们怎么改
2.其次,要改对还不容易,但又怕改不到你说的要求。
3.再次,你输出的语句,输出n有意义吗?况且n定义在while语句的前面,n<10000000永远成立,while语句内部的代码永远执行不到,改完之,n还是等于1.
4.最后,pi=pi*(2*n)/(2*n-1)*(2*n)/(2*n+1);这段语句根本就没用到,你是什么目的。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
叫我情何以堪,while里面的代码怎么可能执行到呀!
回复 使用道具 举报
楼主是要求圆周率吧。帮你简单改了下。
  1. long n=1;
  2.                  double pi=2;
  3.                  while  (n<10000000) {
  4.                          pi=(double)(pi*(2*n)/(2*n-1)*(2*n)/(2*n+1));
  5.                          n++;
  6.                  }
  7.                  System.out.println ("pi="+pi) ;
复制代码
楼主估计是想取到尽量多的位,建议楼主用StringBuilder来做存储,并在循环结束后一次打印出。
这个是按照楼主的思路写的,不过double精度的变量位数有限的,也就是说不能达到楼主的目标要求。

希望有所帮助

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
王磊 发表于 2013-6-21 22:39
楼主是要求圆周率吧。帮你简单改了下。楼主估计是想取到尽量多的位,建议楼主用StringBuilder来做存储,并 ...

在补充一下,因为double精度有限,所以你做循环乘法的时候,每一次的结果都会损失精度,按照楼主的思路去求的话,我测试了一下,基本到第6位,就已经不符合圆周率的要求了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马