public class Test {
static int DISPCNT = 1000; // 显示位数
static int num_proc = 8;
public static void main(String[] args) {
new Test().calcPI();
}
// π = 2 + 2/3 + 2/3*2/5 + 2/3*2/5*3/7 + ...
void calcPI() {
int ARRSIZE = DISPCNT + 10;// 数组大小
char x[] = new char[ARRSIZE];// x[0]x[1].x[2]x[3]....x[ARRSIZE]
char z[] = new char[ARRSIZE];// z存放每个
int a = 1, b = 3;// 分子a,分母b
int c, d;// 进位c,末位d
int Run = 1;
int i;
x[1] = 2;
z[1] = 2;
while (Run != 0) {
// z*=a;
d = 0;
for (i = ARRSIZE - 1; i > 0; i--) {
c = z[i] * a + d;
z[i] = (char) (c % 10);
d = c / 10;
}
// z/=b;
d = 0;
for (i = 0; i < ARRSIZE; i++) {
c = z[i] + d * 10;
z[i] = (char) (c / b);
d = c % b;
}
// x+=z;
Run = 0;
for (i = ARRSIZE - 1; i > 0; i--) {
c = x[i] + z[i];
x[i] = (char) (c % 10);
x[i - 1] += c / 10;
Run |= z[i];
}
a++;
b += 2;
}
System.out.print("Pi=" + (int) (x[1]) + ".");
for (i = 0; i < DISPCNT; i++) {
System.out.print((int) (x[i + 2]));
}
System.out.println();
}
}