谁能用C/C++编一个计算π小数点后无限位的程序(意思就是边计算,边显示。)具体见补充 80

再在显示的最后一行显示时间和小数点后尾数。小弟有的财富都给你。... 再在显示的最后一行显示时间和小数点后尾数。

小弟有的财富都给你。
展开
 我来答
xoaxa
2013-05-09 · TA获得超过8613个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3621万
展开全部
#include <stdio.h>
#define MAXLEN 1000
#define N MAXLEN/4 + 1
// MAXLEN 为位数,N是array长度
void add(int*, int*, int*);
void sub(int*, int*, int*);
void div(int*, int, int*);
int main(void) {
int s[N + 3] = {0};
int w[N + 3] = {0};
int v[N + 3] = {0};
int q[N + 3] = {0};
int n = (int)(MAXLEN/1.39793 + 1);
int k,count = 1;
w[0] = 16*5;
v[0] = 4*239;
for(k = 1; k <= n; k++) {
// 套用公式
div(w, 25, w);
div(v, 239, v);
div(v, 239, v);
sub(w, v, q);
div(q, 2*k-1, q);
if(k%2) // 奇数项
add(s, q, s);
else // 偶数项
sub(s, q, s);
}
printf("%d.", s[0]);
for(k = 1; k < N; k++) {
if((count % 10) == 0) printf("\n");
printf("%04d", s[k]);
count++;
}
printf("\n");
return 0;
}
void add(int *a, int *b, int *c) {
int i, carry = 0;
for(i = N + 1; i >= 0; i--) {
c[i] = a[i] + b[i] + carry;
if(c[i] < 10000)
carry = 0;
else { // 进位
c[i] = c[i] - 10000;
carry = 1;
}
}
}
void sub(int *a, int *b, int *c) {
int i, borrow = 0;
for(i = N+1; i >= 0; i--) {
c[i] = a[i] - b[i] - borrow;
if(c[i] >= 0)
borrow = 0;
else { // 借位
c[i] = c[i] + 10000;
borrow = 1;
}
}
}
void div(int *a, int b, int *c) { // b 为除数
int i, tmp, remain = 0;
for(i = 0; i <= N+1; i++) {
tmp = a[i] + remain;
c[i] = tmp / b;
remain = (tmp % b) * 10000;
}
}
更多追问追答
追问
如何增加计算位数??
最大多少位??
最后直接退出加getchar()不顶用呀
追答
MAXLEN就是给定的位数,下面是在VC++ 6,0环境下的运行结果。
3.141592653589793238462643383279502884
1971693993751058209749445923078164062862
0899862803482534211706798214808651328230
6647093844609550582231725359408128481117
4502841027019385211055596446229489549303
8196442881097566593344612847564823378678
3165271201909145648566923460348610454326
6482133936072602491412737245870066063155
8817488152092096282925409171536436789259
0360011330530548820466521384146951941511
6094330572703657595919530921861173819326
1179310511854807446237996274956735188575
2724891227938183011949129833673362440656
6430860213949463952247371907021798609437
0277053921717629317675238467481846766940
5132000568127145263560827785771342757789
6091736371787214684409012249534301465495
8537105079227968925892354201995611212902
1960864034418159813629774771309960518707
2113499999983729780499510597317328160963
1859502445945534690830264252230825334468
5035261931188171010003137838752886587533
2083814206171776691473035982534904287554
6873115956286388235378759375195778185778
0532171226806613001927876611195909216420
1989
Press any key to continue
百度网友e591bcd
2013-05-09 · TA获得超过988个赞
知道小有建树答主
回答量:518
采纳率:0%
帮助的人:416万
展开全部
计算机的计算精度是有限的,所有编出的程序也是只能算到有限位,现在能算出的也就小数点后几百万位。
追问
也可以呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞天弧月
2013-05-09 · 超过29用户采纳过TA的回答
知道答主
回答量:161
采纳率:0%
帮助的人:87.1万
展开全部
PI能计算么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zwh宁静致远
2013-05-09 · 超过27用户采纳过TA的回答
知道答主
回答量:93
采纳率:0%
帮助的人:40.8万
展开全部
如果你要很多位的话可以用matlab来求。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式