计算机使得计算的精度高到足以满足需要,比如,我们平时用到的圆周率,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。看起来结果是对的,呵呵
----------------解决方案--------------------------------------------------------
汪精卫.......
----------------解决方案--------------------------------------------------------