用C语言编程求圆周率,要求用命令行实现,计算到小数点后2000位

问题在2000位这么多怎么实现。给出整个调试正确的程序我讲追加200积分。我要请你们解决的就是数组太长的问题。再给出程序的时候希望能在程序中关键部位添加注释,因为我的C不... 问题在2000位这么多怎么实现。
给出整个调试正确的程序我讲追加200积分。
我要请你们解决的就是数组太长的问题。再给出程序的时候希望能在程序中关键部位添加注释,因为我的C不太好,谢谢。
展开
 我来答
百度网友a6bf412
推荐于2016-10-16 · TA获得超过1123个赞
知道小有建树答主
回答量:588
采纳率:0%
帮助的人:753万
展开全部
/*
* 编译成可执行文件后,在DOS提示符下执行:
* 如果带一个命令行参数,则该值为要计算的位数;
* 如果还带有第二个参数,则使用stomer公式计算。
* 代码如下:
*/

#include <stdio.h>
#include <stdlib.h>

void main(int argc,char *argv[])
{
long *pi,*t,m,n,r,s;
int t0[][3] = {48,32,20,24,8,4},k0[][3] = {1,1,0,1,1,1},n0[][3] = {18,57,239,8,57,239};
int d,i,j,k,p,q;
d=(argc>1)?(((i = atoi(argv[1]))<0)?0:i):1000;
q=(argc>2)?1:0;
printf("%s\n\n", "Nature (R) Pi value compute Program (C) Tue 2005.11.10");
printf("pi= %s%d * arctg(1/%d) %s %d * arctg(1/%d) %s %d * arctg(1/%d) [%s]\n",
k0[q][0] ? "" : "-", t0[q][0], n0[q][0], k0[q][1] ? "+" : "-", t0[q][1],
n0[q][1], k0[q][2] ? "+" : "-", t0[q][2], n0[q][2], q ? "Stomer" : "Gauss");
if((t = (long *)calloc((d += 5) + 1, sizeof(long))) == NULL)
return 1;
if((pi = (long *)calloc(d + 1, sizeof(long))) == NULL)
return 2;
for(i = d; i >= 0; i--) pi[i] = 0;
for(p = 0; p < 3; p++)
{
for(k=k0[q][p], n=n0[q][p], t[i=j=d]=t0[q][p], i--; i >= 0; i--)
t[i] = 0;
for(r = 0, i = j; i >= 0; i--)
{
r = (m = 10 * r + t[i]) % n;
t[i] = m / n;
k ? (pi[i] += t[i]) : (pi[i] -= t[i]);
}
while (j > 0 && t[j] == 0)
j--;
for (k = !k, s = 3, n *= n; j > 0; k = !k, s += 2)
{
for (r = 0, i = j; i >= 0; i--)
{
r = (m = 10 * r + t[i]) % n;
t[i] = m / n;
}
while (j > 0 && t[j] == 0)
j--;
for (r = 0, i = j; i >= 0; i--)
{
r = (m = 10 * r + t[i]) % s;
m /= s;
k ? (pi[i] += m) : (pi[i] -= m);
}
}
}
for (n = i = 0; i <= d; pi[i++] = r)
{
n = (m = pi[i] + n) / 10;
if ((r = m % 10) < 0)
r += 10, n--;
}
printf("pi= %ld.", pi[d]);
for (i = d - 1; i >= 5; i--)
printf("%ld%s", pi[i], ((m = d - i + 5) % 65) ? ((m % 5) ? "" : " ") : "\n");
printf("%sDIGITS: %d\n", (m % 65) ? "\n" : "", d - 5);
return 2;getch();
}
TableDI
2024-07-18 广告
仅需3步!不写公式自动完成Excel vlookup表格匹配!Excel在线免,vlookup工具,点击19步自动完成表格匹配,无需手写公式,免费使用!... 点击进入详情页
本回答由TableDI提供
495196274
2008-06-21 · TA获得超过1932个赞
知道答主
回答量:37
采纳率:0%
帮助的人:0
展开全部
不过用tc编译的时候会提示错误 因为数组太长
最好找别的编译器
#include "stdio.h"
#include "conio.h"
long a=10000, b, c=28000, d, e, f[28010], g;

void main()
{
for( ;b-c; ) f[b++] =a/5;
for( ; d=0, g=c*2; c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c; d+=f[b]*a,f[b] =d%--g,d/=g--,--b; d*=b ) ;
getch( );
return;
}

/*
* 编译成可执行文件后,在DOS提示符下执行:
* 如果带一个命令行参数,则该值为要计算的位数;
* 如果还带有第二个参数,则使用stomer公式计算。
* 代码如下:
*/

#include <stdio.h>
#include <stdlib.h>

void main(int argc,char *argv[])
{
long *pi,*t,m,n,r,s;
int t0[][3] = {48,32,20,24,8,4},k0[][3] = {1,1,0,1,1,1},n0[][3] = {18,57,239,8,57,239};
int d,i,j,k,p,q;
d=(argc>1)?(((i = atoi(argv[1]))<0)?0:i):1000;
q=(argc>2)?1:0;
printf("%s\n\n", "Nature (R) Pi value compute Program (C) Tue 2005.11.10");
printf("pi= %s%d * arctg(1/%d) %s %d * arctg(1/%d) %s %d * arctg(1/%d) [%s]\n",
k0[q][0] ? "" : "-", t0[q][0], n0[q][0], k0[q][1] ? "+" : "-", t0[q][1],
n0[q][1], k0[q][2] ? "+" : "-", t0[q][2], n0[q][2], q ? "Stomer" : "Gauss");
if((t = (long *)calloc((d += 5) + 1, sizeof(long))) == NULL)
return 1;
if((pi = (long *)calloc(d + 1, sizeof(long))) == NULL)
return 2;
for(i = d; i >= 0; i--) pi[i] = 0;
for(p = 0; p < 3; p++)
{
for(k=k0[q][p], n=n0[q][p], t[i=j=d]=t0[q][p], i--; i >= 0; i--)
t[i] = 0;
for(r = 0, i = j; i >= 0; i--)
{
r = (m = 10 * r + t[i]) % n;
t[i] = m / n;
k ? (pi[i] += t[i]) : (pi[i] -= t[i]);
}
while (j > 0 && t[j] == 0)
j--;
for (k = !k, s = 3, n *= n; j > 0; k = !k, s += 2)
{
for (r = 0, i = j; i >= 0; i--)
{
r = (m = 10 * r + t[i]) % n;
t[i] = m / n;
}
while (j > 0 && t[j] == 0)
j--;
for (r = 0, i = j; i >= 0; i--)
{
r = (m = 10 * r + t[i]) % s;
m /= s;
k ? (pi[i] += m) : (pi[i] -= m);
}
}
}
for (n = i = 0; i <= d; pi[i++] = r)
{
n = (m = pi[i] + n) / 10;
if ((r = m % 10) < 0)
r += 10, n--;
}
printf("pi= %ld.", pi[d]);
for (i = d - 1; i >= 5; i--)
printf("%ld%s", pi[i], ((m = d - i + 5) % 65) ? ((m % 5) ? "" : " ") : "\n");
printf("%sDIGITS: %d\n", (m % 65) ? "\n" : "", d - 5);
return 2;getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4dc7f90
2008-06-20 · TA获得超过1.6万个赞
知道小有建树答主
回答量:1702
采纳率:0%
帮助的人:706万
展开全部
不过用tc编译的时候会提示错误 因为数组太长
最好找别的编译器
#include "stdio.h"
#include "conio.h"
long a=10000, b, c=28000, d, e, f[28010], g;

void main()
{
for( ;b-c; ) f[b++] =a/5;
for( ; d=0, g=c*2; c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c; d+=f[b]*a,f[b] =d%--g,d/=g--,--b; d*=b ) ;
getch( );
return;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gudulang13
2008-06-24 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:71.6万
展开全部
B-S 那些盗用版权者
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
研究报告站
2008-06-21 · TA获得超过195个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:319万
展开全部
495196274 - 魔法学徒 一级
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式