/*
* 创建日期 2012-4-2
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
/**
* @author lenovo
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*
*/
import java.util.Scanner;
public class Test40006 {
public static void main(String[] args) {
int ri, repeat;
int temp, flag;
double eps, item, sum = 0;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri<=repeat; ri++){
eps=in.nextDouble();
/*--------------------*/
sum= count(repeat,eps);
/*---------------------*/
System.out.println((int)(sum*10000+0.5)/10000.);
}
}
/**
* @param repeat
* @param eps
* @return s 每一次的运行结果
*/
private static double count(int repeat, double eps) {
double s=0;
//首先计算 1-1/3+1/5-1/7+……
//需要考虑符号和分母变化
long count=0;//项目数 1是第一项 -0.3^3是第二项 ……
count=cishu(eps);//求出项目数
for (long j=1;j<=count;j++){//把一个项目数的多项式的和计算出来
s+=fuhao(j-1,(double)1/(2*j-1));
}
return s;
// TODO 自动生成方法存根
}
/**
* @param eps
* @return m 运行次数 从1开始是第一项,-0.3……3是第二项
*/
private static long cishu(double eps) {
long m=0,n=1;
while(Math.abs((double)1/(2*n-1))>=eps){
m++;n++;
}
return m;
}
/**
* @param count
* @return fu 每一项的值
*/
private static double fuhao(long count,double fumu) {
double fu=0;
fu=Math.pow(-1,count)*fumu;
return fu;
}
}
希望对你有帮助