当前位置: 代码迷 >> Java相关 >> [求助](求助)大虾来帮忙
  详细解决方案

[求助](求助)大虾来帮忙

热度:95   发布时间:2005-08-30 13:39:00.0
[求助](求助)大虾来帮忙

计算机使得计算的精度高到足以满足需要,比如,我们平时用到的圆周率,3.1415926535897932.......

已经有许多小程序可以计算几乎任意多位的圆周率。

此题的任务是:设计一个程序,该程序可以计算给定位数的圆周率。

要求:程序运行时,可输入要求的位数,然后程序开始计算,将计算结果保存在一个文本文件中。

比如,输入10000,则程序将计算10000位圆周率,并将结果放在p10000.txt文件中。其它类推。

位数范围在1与10000000之间。

评定标准:1、看结果的精确度;2、看运行的时间。

编程语言不限。 非常感谢 在线等待回贴

搜索更多相关的解决方案: 计算  计算机  文本文件  圆周率  

----------------解决方案--------------------------------------------------------
这是个算法题,还要知道计算PI 的公式,我不喜欢做这种题。
----------------解决方案--------------------------------------------------------
没有人会吗
π = 2 + 2/3 + 2/3*2/5 + 2/3*2/5*3/7 + ...



void __fastcall TForm1::Button2Click(TObject *Sender)
{
  const ARRSIZE=1010, DISPCNT=1000; //定义数组大小,显示位数
  char x[ARRSIZE], z[ARRSIZE]; //x[0] x[1] . x[2] x[3] x[4] .... x[ARRSIZE-1]
  int a=1, b=3, c, d, Run=1, Cnt=0;

  memset(x,0,ARRSIZE);
  memset(z,0,ARRSIZE);

  x[1] = 2;
  z[1] = 2;

  while(Run && (++Cnt<200000000))
  {
    //z*=a;
    d = 0;
    for(int i=ARRSIZE-1; i>0; i--)
    {
      c = z[i]*a + d;
      z[i] = c % 10;
      d = c / 10;
    }
    //z/=b;
    d = 0;
    for(int i=0; i<ARRSIZE; i++)
    {
      c = z[i]+d*10;
      z[i] = c / b;
      d = c % b;
    }
    //x+=z;
    Run = 0;
    for(int i=ARRSIZE-1; i>0; i--)
    {
      c = x[i] + z[i];
      x[i] = c%10;
      x[i-1] += c/10;
      Run |= z[i];
    }
    a++;
    b+=2;
  }
  Memo1->Text = AnsiString().sprintf("计算了 %d 次\\r\\n",Cnt);
  Memo1->Text = Memo1->Text + AnsiString().sprintf("Pi=%d%d.\\r\\n", x[0],x[1]);
  for(int i=0; i<DISPCNT; i++)
  {
    if(i && ((i%100)==0))
    Memo1->Text = Memo1->Text + "\\r\\n";
    Memo1->Text = Memo1->Text + (int)x[i+2];
  }
}

谁能把他转化成JAVA
----------------解决方案--------------------------------------------------------
tempnetbar,
这道题就交给你了,不要不给我面子奥。
----------------解决方案--------------------------------------------------------
谢谢大哥 了  希望早日完成   555555  急需
----------------解决方案--------------------------------------------------------
斑竹 怎么都没有人做
----------------解决方案--------------------------------------------------------
斑竹大人最近比较忙啊,呵呵,这就给你看看,wait a minute~
----------------解决方案--------------------------------------------------------

基本上再现了你这个C++的函数,hoho,结果是否正确呢?不得而知 public class pi { public static void main(String args[]) { calcPI(); } public static void calcPI() { final int ARRSIZE=1010, DISPCNT=1000; //定义数组大小,显示位数 char[] x = new char[ARRSIZE]; char[] z = new char[ARRSIZE]; //x[0] x[1] . x[2] x[3] x[4] .... x[ARRSIZE-1] int a=1, b=3, c, d, Cnt=0; boolean Run = true; x[1] = 2; z[1] = 2;

while(Run && (++Cnt<200000000)) { //z*=a; d = 0; for(int i=ARRSIZE-1; i>0; i--) { c = z[i]*a + d; z[i] = (char)(c % 10); d = c / 10; } //z/=b; d = 0; for(int i=0; i<ARRSIZE; i++) { c = z[i]+d*10; z[i] = (char)(c / b); d = c % b; } //x+=z; Run = false; for(int i=ARRSIZE-1; i>0; i--) { c = x[i] + z[i]; x[i] = (char)(c%10); x[i-1] += c/10; Run |= (z[i] > 0); } a++; b+=2; } System.out.print("计算了 " + Cnt + "次\r\n"); System.out.print("Pi=" + x[0] + x[1] + ".\r\n"); for(int i=0; i<DISPCNT; i++) { if(i>0 && ((i%100)==0)) System.out.print("\r\n"); System.out.print((int)x[i+2]); } } }


----------------解决方案--------------------------------------------------------
那个开头的一个心的符号就是ascii为3的符号,其实就是3。看起来结果是对的,呵呵
----------------解决方案--------------------------------------------------------
汪精卫.......
----------------解决方案--------------------------------------------------------
  相关解决方案