
谁能用C/C++编一个计算π小数点后无限位的程序(意思就是边计算,边显示。)具体见补充 80
4个回答
展开全部
#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
展开全部
计算机的计算精度是有限的,所有编出的程序也是只能算到有限位,现在能算出的也就小数点后几百万位。
追问
也可以呀
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
PI能计算么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你要很多位的话可以用matlab来求。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |