各位大侠麻烦帮忙一下编写java程序,用如下公式计算圆周率π的近似值: π=4-4/3+4/5-4/7+4/9-4/11+...
回答程序要计算多少项才能得到数值3.14、3.141、3.1415、3.14159.

解决方案 »

  1.   

    I copy it...but algorithm is right...
    #include<iostream> 
    using namespace std; int main() 

    double pi=0; 
    int i; 
    for(i=1;1/double(i)>0.0000001;i=i+2) 

    if((i/2+1)%2==1) pi+=4/double(i); else pi-=4/double(i); 

    cout<<"pi="<<pi<<endl; 
    }
      

  2.   

    (一)梅钦公式
    pi=16arctg(1/5)-4arctg(1/239)
    arctg(x)=x-[(x^3)/3]+[(x^5)/5]-[(x^7)/7]+...+(-1)^(n-1)[x^(2n-1)/(2n-1)](二)韦达公式
    2/pi={[2^(1/2)/2]}*|{[2+2^(1/2)]^(1/2)}/2|*... 太麻烦,看图
      

  3.   

    Niubility!!!
      

  4.   

    如题
    import java.math.*;public class Test{

    public static double dChange(int n,double k){
    BigDecimal bd = new BigDecimal(k);
    return bd.setScale(n,bd.ROUND_HALF_EVEN).doubleValue();
    }

    public static void main(String args[]){
    double dPI1 = 3.14;
    double dPI2 = 3.141;
    double dPI3 = 3.1415;
    double dPI4 = 3.14159;
    double dTemp1 = 0;
    double dTemp2 = 0;

    for(int i=1;;i++){
    dTemp1 += java.lang.Math.pow(-1,i+1)*4/(2*i-1);
    dTemp2 = dChange(2,dTemp1);
    if(dTemp2 == dPI1){
    System.out.println("数值"+dPI1+"要计算"+i+"项。");
    dTemp1 = 0;
    break;
    }
    }
    for(int i=1;;i++){
    dTemp1 += java.lang.Math.pow(-1,i+1)*4/(2*i-1);
    dTemp2 = dChange(3,dTemp1);
    if(dTemp2 == dPI2){
    System.out.println("数值"+dPI2+"要计算"+i+"项。");
    dTemp1 = 0;
    break;
    }
    }
    for(int i=1;;i++){
    dTemp1 += java.lang.Math.pow(-1,i+1)*4/(2*i-1);
    dTemp2 = dChange(4,dTemp1);
    if(dTemp2 == dPI3){
    System.out.println("数值"+dPI3+"要计算"+i+"项。");
    dTemp1 = 0;
    break;
    }
    }
    for(int i=1;;i++){
    dTemp1 += java.lang.Math.pow(-1,i+1)*4/(2*i-1);
    dTemp2 = dChange(5,dTemp1);
    if(dTemp2 == dPI4){
    System.out.println("数值"+dPI4+"要计算"+i+"项。");
    dTemp1 = 0;
    break;
    }
    }
    }
    }
      

  5.   

    public class Test1 {    public static void main(String[] args) {
            double[] pi = {3.1, 3.14, 3.141, 3.1415, 3.14159, 
                    3.141592, 3.1415926, 3.14159265
                };
            for(int i = 0; i < pi.length; i++) {
                printCount(pi[i]);
            }
        }
        
        public static void printCount(double pi) {
            int sign = 1;
            double p = 0;
            int count = 0;
            
            int multi = fix2Int(pi);
            int fixPi = (int)(pi * multi);
            while(true) {
                p += (sign * 4) / (double)(2 * count + 1);
                if((int)(p * multi) == fixPi) {
                    System.out.printf("%-10s %11.16f %9d%n", pi, p, count);
                    return;
                }
                sign = -sign;
                count++;
            }        
        }
        
        private static int fix2Int(double n) {
            int k = 1;
            while(n % 1 > 1e-6) {
                k *= 10;
                n *= 10;
            }
            return k;
        }
    }3.1        3.1941879092319425        18
    3.14       3.1499958665934700       118
    3.141      3.1410002365801590      1687
    3.1415     3.1415000095284658     10793
    3.14159    3.1415999999947860    136120
    3.141592   3.1415920000002330   1530011
    3.1415926  3.1415926000000005  18660303
    3.14159265 3.1415926599999993 155973050再高的精度就达不到了,呵呵。
      

  6.   

    汗死,少算一次,改一下:    public static void printCount(double pi) {
            int sign = 1;
            double p = 0;
            int count = 1;
            
            int multi = fix2Int(pi);
            int fixPi = (int)(pi * multi);
            while(true) {
                p += (sign * 4) / (double)(2 * count - 1);
                if((int)(p * multi) == fixPi) {
                    System.out.printf("%-10s %11.16f %9d%n", pi, p, count);
                    return;
                }
                sign = -sign;
                count++;
            }        
        }3.1        3.1941879092319425        19
    3.14       3.1499958665934700       119
    3.141      3.1410002365801590      1688
    3.1415     3.1415000095284658     10794
    3.14159    3.1415999999947860    136121
    3.141592   3.1415920000002330   1530012
    3.1415926  3.1415926000000005  18660304
    3.14159265 3.1415926599999993 155973051