suepr π

 

 

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();
    }
}

 

posted @ 2017-04-20 10:20  牧 天  阅读(187)  评论(0)    收藏  举报